构建、测试和容器化 Java 应用

本页介绍了如何使用 Cloud Build 构建、测试和容器化基于 Java 的应用、将容器映像上传到 Artifact Registry 以及生成 build 来源。

准备工作

使用 mavengradle 映像

您可以将 Cloud Build 配置为使用 maven 图片gradle 图片 运行容器

maven

如需在 maven 映像中执行任务,请向 build 配置文件添加一个步骤,并添加以下字段:

  • name:将此字段的值设置为 mavenmaven:<tag>,其中 标记表示版本。如果您未指定映像标记,则 Cloud Build 默认使用 latest 映像。
  • entrypoint:设置此字段会替换 name 中引用的图片。将此字段的值设置为 mvn 以进行调用 将 mvn 作为构建步骤的入口点并运行 mvn 命令。
  • args:构建步骤的 args 字段接受一系列参数, 并将其传递给 name 字段引用的图像。

以下构建步骤为 maven 映像指定 entrypoint 标记为 3.3-jdk-8 并输出构建工具版本:

steps:
- name: maven:3.3-jdk-8
  entrypoint: mvn
  args: ['--version']

gradle

如需在 gradle 映像中执行任务,请在构建配置中添加包含以下字段的步骤:

  • name:将此字段的值设置为 gradlegradle:<tag>,其中 标记表示版本。如果您未指定映像标记,则 Cloud Build 默认使用 latest 映像。
  • entrypoint:设置此字段会替换 name 中引用的图片。将此字段的值设置为 gradle 以进行调用 将 gradle 作为构建步骤的入口点并运行 gradle 命令。
  • args:构建步骤的 args 字段接受一系列参数, 并将其传递给 name 字段引用的图像。

以下构建步骤为 gradle 映像指定 entrypoint 标记为 5.6.2-jdk8 并输出构建工具版本:

steps:
- name: gradle:5.6.2-jdk8
  entrypoint: gradle
  args: ['--version']

配置 Java 构建

  1. 在项目根目录中,创建一个名为 cloudbuild.yaml 的构建配置文件。

  2. 运行测试mavengradle 会提供 maven testgradle test,用于下载依赖项,构建应用以及运行源代码中指定的任何测试。构建步骤的 args 字段采用一系列参数,并将其传递给 name 字段引用的映像。

    在构建配置文件中,将 test 添加到 args 字段可在 mavengradle 内调用 test

    maven

    steps:
    - name: maven:3.3-jdk-8
      entrypoint: mvn
      args: ['test']
    

    gradle

    steps:
    - name: gradle:5.6.2-jdk8
      entrypoint: gradle
      args: ['test']
    
  3. 软件包应用 (Package application):如需针对 maven 映像将您的应用打包为 JAR 文件,请在 args 字段中指定 package 命令。package 命令可在 /workspace/target/ 中构建 JAR 文件。

    如需针对 gradle 映像将您的应用打包为 JAR 文件,请在 args 字段中指定 assemble 命令。assemble 命令可在 workspace/build/libs 中构建 JAR 文件。

    以下构建步骤将打包您的 Java 应用:

    maven

    steps:
    - name: maven:3.3-jdk-8
      entrypoint: mvn
      args: ['package','-Dmaven.test.skip=true']
    

    gradle

    steps:
    - name: gradle:5.6.2-jdk8
      entrypoint: gradle
      args: ['assemble']
    
  4. 容器化应用:Cloud Build 提供 预构建的 Docker 映像 可用于容器化 Java 应用。要将您的 Java 应用,在您的构建配置文件中:

    • 添加 name 字段并在 gcr.io/cloud-builders/docker 中指定预构建的 Docker 映像。
    • 添加 args 字段并指定 build 参数,包括 要构建的容器映像以及构建工件的路径。
    • 添加 images 字段,以将构建的容器映像推送到 Artifact Registry。
    • 可选:添加 requestedVerifyOption: VERIFIED 在 build 配置文件的 options 字段中启用 软件制品 (SLSA) 的供应链级别 生成文本。

    以下构建步骤会将您的应用容器化, 映像上传到 Artifact Registry,并生成 build 出处信息:

    maven

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=target/build-artifact', '.']
    images: ['location-docker.pkg.dev/project-id/repository/image']
    

    gradle

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=build/libs/build-artifact', '.']
    images: ['location-docker.pkg.dev/project-id/repository/image']
    

    其中:

    • location:代码库的单区域或多区域位置。
    • project-id:您的 Google Cloud 项目的 ID。
    • repository:您的代码库 Artifact Registry 的名称。
    • image:容器映像的名称。
    • build-artifact:根据构建步骤创建的 JAR 文件的名称。
  5. 启动构建:准备好构建配置文件后,通过在终端中输入以下命令来启动构建:

    gcloud builds submit --region=REGION --config config-file-path source-directory
    

    其中:

    • config-file-path:构建配置文件的路径。在此示例中,构建配置文件名为 cloudbuild.yaml
    • source-directory:源代码的路径或网址。
    • REGION:某个受支持的 build 区域

    如果您未在 gcloud builds submit 命令中指定 config-file-pathsource-directory,则 Cloud Build 会假定配置文件和源代码位于当前工作目录中。

    构建完成后,您可以在 Artifact Registry 中查看代码库详情

    您还可以查看 build 来源元数据验证来源

代码示例

以下是一些可用于构建 Java 应用的示例代码库,每个代码库都包含一个示例应用和一个用于构建和测试该应用的构建配置文件:

  • maven-example:一个 Java 应用和一个使用 mvn 构建和测试该应用的示例构建配置文件。
  • gradle-example:一个 Java 应用和一个使用 gradle 构建和测试该应用的示例构建配置文件。

后续步骤