当前位置: 首页 > 知识库问答 >
问题:

如何在google cloudbuild上构建quarkus原生映像

岳锦
2023-03-14

有人知道如何在CloudBuild上构建quarkus原生映像吗?我使用以下命令来执行此操作:

- name: maven:3-jdk-11
    entrypoint: mvn
    args: ["package", "-Dmaven.test.skip=true", "-Pnative", "-Dquarkus.native.container-build=true", "-Dquarkus.container-image.build=true"]

在本地,一切都很好,但当我试图在谷歌云上做这件事时,它抛出了一个错误:

[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.12.2.Final:build (default) on project fishki: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR]     [error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: java.lang.IllegalStateException: No container runtime was found to run the native image builder
[ERROR]     at io.quarkus.deployment.pkg.steps.NativeImageBuildContainerRunner.detectContainerRuntime(NativeImageBuildContainerRunner.java:114)

我使用以下cloudbuild.yaml

steps:
  - name: maven:3-jdk-11
    entrypoint: mvn
    args: ["quarkus:add-extension", "-Dextensions=container-image-docker"]
  - name: docker:latest
  - name: maven:3-jdk-11
    entrypoint: mvn
    args: ["package", "-Pnative", "-Dmaven.test.skip=true", "-Dquarkus.container-image.build=true", "-Dquarkus.native.container-build=true", "-Dquarkus.native.container-runtime=docker"]
  - name: 'gcr.io/cloud-builders/docker'
    args: [ 'build', '-t', 'gcr.io/XXX-XX-XXX/XX-XXX', '.' ]
  - name: "gcr.io/cloud-builders/docker"
    args: ["push", "gcr.io/XXXX/XXX-XXXX"]
  - name: "gcr.io/cloud-builders/gke-deploy"
    args:
      - run
      - --filename=./deployment.yaml
      - --image=gcr.io/XXX/XXX:latest
      - --location=europe-west1-b
      - --cluster=XX-XXX-XXX-1

现在我有了一个新问题--当我试图安装docker容器运行时时,我得到以下错误:

[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.12.2.Final:build (default) on project fishki: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR]     [error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: java.lang.RuntimeException: Failed to pull builder image quay.io/quarkus/ubi-quarkus-native-image:21.0.0-java11

共有1个答案

王经赋
2023-03-14

我在这个问题上挣扎了一段时间,但你问的问题中的信息帮助了我很多,所以谢谢你的想法,让我解决了这个问题。

我最终的方法是构建一个自定义构建映像,如下所示(DockerFile):

FROM maven:3-jdk-11
run apt-get update
run apt-get install docker.io -y
run docker --version

您可以在这里找到我的构建映像(注意:我的构建映像适用于gradle,而不是maven):https://hub.docker.com/repository/docker/lackrobin/quarkus-gradle-build-image

steps:
  - name: gcr.io/[link to the builder image above]
    args:
      - addExtension
      - '--extensions=container-image-docker'
      - build
      - '-Dquarkus.package.type=native'
      - '-Dquarkus.native.native-image-xmx=16g'
      - '-Dorg.gradle.jvmargs=-Xmx3g -XX:MaxPermSize=2048m'
    entrypoint: ./gradlew
  - name: gcr.io/cloud-builders/docker
    args:
      - build
      - '-t'
      - gcr.io/[project name]/[image name]
      - '-f'
      - src/main/docker/Dockerfile.native
      - .
images:
timeout: 2000s
  - gcr.io/gcr.io/[project name]/[image name]
options:
  machineType: E2_HIGHCPU_32

quarkus或GraalVM使用大量资源进行构建。我不得不使用具有更多资源的vm进行构建。options下的命令machinetype:e2_highcpu_32对此负责。

 类似资料:
  • 我正在遵循本机Quarkus的官方教程,但无法运行以下步骤: GRAALVM发行版中不存在目录。 我从https://github.com/oracle/graal/releases下载了最新的GraalVM,版本19.3.1在这个日期。 我应该如何运行命令?

  • 似乎默认情况下,Quarkus生成的本机映像不包含任何与< code>src/main/resources/中的内容相对应的类路径资源。 从GraalVM医生那里,我有点理解为什么会发生这种情况,但现在我被卡住了。是否有方法配置以将资源包含在本机映像中?

  • 有可能在Java 16下构建本机Quarkus映像吗?没有找到任何操作说明。 不知何故,这应该是可能的,因为Oracle发布了对Java16的GraalVM支持(https://www.graalvm.org/release-notes/21_1/)

  • 在我的项目的根目录中,我发出了以下命令来创建一个特定于我的操作系统的本机可执行文件。有关详细信息,请参阅以下指南 这是输出。 本机映像生成失败,因为构建刚刚挂起。 我选择在主机上安装Graal VM,并选择非基于容器的方法,如下所示。 > ❯ brew安装——cask GRALVM/tap/GRALVM-ce-lts-java11 将Graal VM添加到JEnv管理的Java版本 ❯ jenv

  • 我刚刚从https://micronaut.io/launch for Java8下载了一个新项目,该项目具有以下特性: AWS lambda AWS Lambda运行时 GraalVM支持 在readme.md中,它实际上只显示了使用gradle获得本机映像的构建指令。但是用Maven怎么做呢?