如何在google cloudbuild上构建quarkus本机镜像

Ksz*_*Ksz 6 maven graalvm google-cloud-build quarkus cloudbuild.yaml

有谁知道如何在 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"]
Run Code Online (Sandbox Code Playgroud)

在本地一切正常,但当我尝试在 Google Cloud 上执行此操作时,会抛出错误:

[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)
Run Code Online (Sandbox Code Playgroud)

我的想法是尝试提供容器运行时来运行本机映像生成器,但我不知道该怎么做。

我将不胜感激任何帮助,谢谢!

编辑

我使用以下 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

Run Code Online (Sandbox Code Playgroud)

现在我遇到了一个新问题 - 当我尝试安装 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
Run Code Online (Sandbox Code Playgroud)

GD2*_*D21 2

我为此苦苦挣扎了一段时间,但是您提出的问题中的信息对我帮助很大,所以感谢您提供的想法引导我解决了这个问题。

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

FROM maven:3-jdk-11
run apt-get update
run apt-get install docker.io -y
run docker --version
Run Code Online (Sandbox Code Playgroud)

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

将此映像推送到 gcr 或您可以从 google cloud build 访问的任何其他注册表。

cloudbuild.yaml文件中,以下配置应该可以解决问题:

FROM maven:3-jdk-11
run apt-get update
run apt-get install docker.io -y
run docker --version
Run Code Online (Sandbox Code Playgroud)

quarkus 或 GraalVM 使用大量资源来构建。我必须使用具有更多资源的虚拟机来进行构建。machineType: E2_HIGHCPU_32下属指挥部options负责此事。