本页介绍了如何使用 Cloud Build 构建、测试和容器化基于 Java 的应用、将容器映像上传到 Artifact Registry,以及生成 build 来源。
准备工作
- 熟悉如何创建基于 Java 的应用。
- 准备好您的 Java 项目,包括
Dockerfile
。 - 在 Artifact Registry 中拥有 Docker 代码库,或创建新的代码库。
- 熟悉如何编写 Cloud Build 配置文件。
- 如需运行此页面中的
gcloud
命令,请安装 Google Cloud CLI。
使用 maven
或 gradle
映像
您可以将 Cloud Build 配置为使用 Docker Hub 中的 maven
映像或 gradle
映像来构建 Java 应用。
maven
如需在 maven
映像中执行您的任务,请向 build 配置文件添加一个步骤,并添加以下字段:
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
映像中执行您的任务,请向 build 配置文件添加一个步骤,并添加以下字段:
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
构建
在项目根目录中,创建一个名为
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。 可选:在构建配置文件的
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 文件的名称。
- 添加
启动构建:准备好构建配置文件后,通过在终端中输入以下命令来启动构建:
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 来源元数据和验证来源。
- config-file-path:构建配置文件的路径。在此示例中,构建配置文件名为
代码示例
以下是一些可用于构建 Java 应用的示例代码库,每个代码库都包含一个示例应用和一个用于构建和测试该应用的构建配置文件:
- maven-example:一个 Java 应用和一个使用
mvn
构建和测试该应用的示例构建配置文件。 - gradle-example:一个 Java 应用和一个使用
gradle
构建和测试该应用的示例构建配置文件。
后续步骤
- 了解如何查看构建结果。
- 了解如何保护 build。
- 了解如何构建独立 Java 应用。
- 了解如何在 Cloud Run 上部署应用。
- 了解如何在 GKE 上部署应用。
- 了解如何排查构建错误。