构建、测试 Java 应用以及实现容器化

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

准备工作

使用 mavengradle 映像

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

如需在 mavengradle 映像中执行您的任务,请在构建配置文件的 name 字段中指定该映像的网址以及该映像带标记的版本。如果您未指定映像标记,则 Cloud Build 默认使用 latest 映像。Cloud Build 会使用该映像的默认入口点启动 name 中指定的映像。如需替换默认入口点并调用 mavengradle 作为入口点,请在 entrypoint 字段中指定 mvngradle

以下构建配置文件指定了 mavengradle 映像的 entrypoint,并输出了构建工具版本:

Maven

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

Gradle

  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,并生成构建出处信息。如果您不使用 images 字段,Cloud Build 将不会记录出处信息。例如,如果您使用 docker push 构建步骤将映像上传到 Artifact Registry,您的构建作业将没有关联的出处信息。

    以下构建步骤将应用容器化,并将容器映像推送到 Artifact Registry,并生成构建出处信息。

    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. 可选:为区域 build 启用出处

    如果您使用的是区域级 build,请在 build 配置文件的 options 中添加 requestedVerifyOption 字段。将值设置为 VERIFIED 以启用出处元数据生成功能。如果您不添加 requestedVerifyOption: VERIFIED,Cloud Build 仅会为全局构建生成出处。

    options:
      requestedVerifyOption: VERIFIED
    
  6. 启动构建:准备好构建配置文件后,通过在终端中输入以下命令来启动构建:

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

    其中:

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

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

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

    您还可以查看 build 出处元数据验证出处,以帮助保护您的软件供应链。

代码示例

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

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

后续步骤