本页面介绍如何使用 Cloud Build 构建、测试基于 Java 的应用并实现容器化,以及如何将容器映像上传到 Artifact Registry,以及生成构建出处。
准备工作
- 熟悉如何创建基于 Java 的应用。
- 准备好您的 Java 项目,包括一个
Dockerfile
。 - 在 Artifact Registry 中拥有 Docker 代码库,或创建新的代码库。
- 熟悉如何编写 Cloud Build 配置文件。
- 如需运行此页面中的
gcloud
命令,请安装 Google Cloud CLI。
使用 maven
或 gradle
映像
您可以将 Cloud Build 配置为使用 Docker Hub 中的 maven
映像或 gradle
映像来构建 Java 应用。
如需在 maven
或 gradle
映像中执行您的任务,请在构建配置文件的 name
字段中指定该映像的网址以及该映像带标记的版本。如果您未指定映像标记,则 Cloud Build 默认使用 latest
映像。Cloud Build 会使用该映像的默认入口点启动 name
中指定的映像。如需替换默认入口点并调用 maven
或 gradle
作为入口点,请在 entrypoint
字段中指定 mvn
或 gradle
。
以下构建配置文件指定了 maven
或 gradle
映像的 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
构建
在项目根目录中,创建一个名为
cloudbuild.yaml
的构建配置文件。运行测试:
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']
软件包应用 (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']
容器化应用: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 文件的名称。
- 添加
可选:为区域 build 启用出处
如果您使用的是区域级 build,请在 build 配置文件的
options
中添加requestedVerifyOption
字段。将值设置为VERIFIED
以启用出处元数据生成功能。如果您不添加requestedVerifyOption: VERIFIED
,Cloud Build 仅会为全局构建生成出处。options: requestedVerifyOption: VERIFIED
启动构建:准备好构建配置文件后,通过在终端中输入以下命令来启动构建:
gcloud builds submit --region=REGION --config config-file-path source-directory
其中:
- config-file-path:构建配置文件的路径。在此示例中,构建配置文件名为
cloudbuild.yaml
。 - source-directory:源代码的路径或网址。
REGION
:支持的构建区域之一。
如果您未在
gcloud builds submit
命令中指定 config-file-path 和 source-directory,则 Cloud Build 会假定配置文件和源代码位于当前工作目录中。构建完成后,您可以在 Artifact Registry 中查看代码库详情。
您还可以查看 build 出处元数据并验证出处,以帮助保护您的软件供应链。
- config-file-path:构建配置文件的路径。在此示例中,构建配置文件名为
代码示例
以下是一些可用于构建 Java 应用的示例代码库,每个代码库都包含一个示例应用和一个用于构建和测试该应用的构建配置文件:
- maven-example:一个 Java 应用和一个使用
mvn
构建和测试该应用的示例构建配置文件。 - gradle-example:一个 Java 应用和一个使用
gradle
构建和测试该应用的示例构建配置文件。
后续步骤
- 了解如何查看构建结果。
- 了解如何保护 build。
- 了解如何构建独立的 Java 应用。
- 了解如何在 Cloud Run 上部署应用。
- 了解如何在 GKE 上部署应用。
- 了解如何排查构建错误。