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

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

准备工作

使用 maven 或 gradle 映像

您可以将 Cloud Build 配置为使用 Docker Hub 中的 maven 映像或 gradle 映像来构建 Java 应用。

maven

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

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

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

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

gradle

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

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

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

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

配置 Java 构建

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

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

    在构建配置文件中,将 test 添加到 args 字段可在 maven 和 gradle 内调用 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. 容器化应用 (Containerize application):Cloud Build 提供了预构建的 Docker 映像,可用于将 Java 应用容器化。如需将 Java 应用容器化,请在构建配置文件中执行以下操作:

    • 添加 name 字段并指定 gcr.io/cloud-builders/docker 中的预构建 Docker 映像。
    • 添加 args 字段,并指定 build 实参,包括要构建的容器映像的名称以及构建工件的路径。
    • 添加 images 字段以将构建的容器映像推送到 Artifact Registry。
    • 可选:在构建配置文件中的 options 字段内添加 requestedVerifyOption: VERIFIED,以启用软件制品的供应链等级 (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-path 和 source-directory,则 Cloud Build 会假定配置文件和源代码位于当前工作目录中。

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

    您还可以查看 build 出处元数据和验证出处。

代码示例

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

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

后续步骤