本页面介绍了如何使用 Cloud Build 构建、测试和部署 Go 应用。
准备工作
本页面的说明假定您熟悉 Go。此外:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
- 如需运行此页面中的
gcloud
命令,请安装 Google Cloud CLI。 - 准备好 Go 项目。
- 如果您要使用 Cloud Build 将 Go 应用容器化,将需要
Dockerfile
以及源代码。 - 如果您要在 Artifact Registry 中存储构建的容器,请在 Artifact Registry 中创建 Docker 代码库。
- 如果您要在 Cloud Storage 中存储测试日志,请在 Cloud Storage 中创建存储分区。
必需的 IAM 权限
如需将测试日志存储在 Logging 中,请向 Logging 授予 Storage Object Creator (
roles/storage.objectCreator
) 此角色 Cloud Storage 存储桶给您的构建服务账号。如需将构建的映像存储在 Artifact Registry 中,请向 Artifact Registry Writer 授予 (
roles/artifactregistry.writer
) 角色 您的构建服务账号
如需了解如何授予这些角色,请参阅使用 IAM 页面授予角色。
配置 Go 构建
Docker Hub 中的公共 golang
映像支持使用 Go 模块进行构建。将此映像用作 Cloud Build 配置文件中的构建步骤,这样您就可以调用映像中的 go
命令。传递到此构建步骤的参数会直接传递到 golang
工具,让您可以在此映像中运行任何 go
命令。
本部分逐步演示了 Go 应用的构建配置文件示例。该部分包含构建应用、添加单元测试,以及测试通过后容器化和部署应用的构建步骤。
如需构建 Go 应用,请执行以下操作:
在项目根目录中,创建一个名为
cloudbuild.yaml
的 Cloud Build 配置文件。构建和测试:如果您已在应用中定义单元测试,则可以通过在构建步骤中添加以下字段将 Cloud Build 配置为运行测试:
name
:将此字段的值设置为golang
以将 Docker Hub 中的 golang 映像用于您的任务。entrypoint
:将此字段的值设置为/bin/bash
。这样,您就可以 运行多行 bash 命令 构建容器args
:构建步骤的args
字段采用一系列参数,并将其传递给name
字段引用的映像。在以下示例中,args
字段采用参数进行:- 运行测试日志格式化程序以下载测试日志输出。
- 打印日志输出。
- 将测试结果保存在
sponge.log
中。 - 将
sponge.log
中的结果输出到 JUNIT XML 文件。JUNIT XML 文件的名称是使用与您的构建相关联的提交 ID 的短版本构建的。后续构建步骤会将此文件中的日志保存到 Cloud Storage。
将应用容器化:添加构建步骤以确保测试通过后,您可以构建应用。Cloud Build 提供预构建的 Docker 映像,可用于将 Go 应用容器化。如需将您的应用容器化,请在构建步骤中添加以下字段:
name
:将此字段的值设置为gcr.io/cloud-builders/docker
以使用预构建的 Docker 映像来执行任务。args
:为docker build
命令添加参数作为此字段的值。
以下构建步骤会构建映像
myimage
,并使用提交 ID 的短版本来标记该映像。该构建步骤使用替代变量作为项目 ID、代码库名称和短 SHA 值,因此这些值会在构建时自动替换。请注意,您需要在 Artifact Registry 中创建 Docker 代码库或拥有现有的代码库才能存储映像。将容器推送到 Artifact Registry:您可以将构建的容器存储在 Artifact Registry 中,这是一种 Google Cloud 服务,可用于存储、管理和保护构建工件。为此,您需要在 Artifact Registry 中已有 Docker 代码库。如需配置 Cloud Build 以将映像存储在 Artifact Registry Docker 代码库中,请添加具有以下字段的构建步骤:
name
:将此字段的值设置为gcr.io/cloud-builders/docker
为您的任务使用官方的docker
构建器映像。args
:为docker push
命令添加参数作为此字段的值。对于目标网址,输入要在其中存储映像的 Artifact Registry Docker 代码库。
以下构建步骤会将您在上一步中构建的映像推送到 Artifact Registry:
将容器部署到 Cloud Run:如需在 Cloud Run 上部署映像,请添加包含以下字段的构建步骤:
name
:将此字段的值设置为google/cloud-sdk
以使用 gcloud CLI 映像来调用gcloud
命令,从而在 Cloud Run 上部署映像。args
:为gcloud run deploy
命令添加参数作为此字段的值。
以下构建步骤会将之前构建的映像部署到 Cloud Run:
将测试日志保存到 Cloud Storage:您可以配置 Cloud Build,以便通过指定现有存储分区位置和测试日志的路径在 Cloud Storage 中存储所有测试日志。
以下构建步骤会将保存在 JUNIT XML 文件中的测试日志存储到 Cloud Storage 存储分区:
以下代码段展示了针对上述所有步骤的完整构建配置文件:
使用 gcloud CLI 或构建触发器启动构建。您必须在开始构建时指定 Artifact Registry 代码库名称。
要在使用以下命令启动构建时指定 Artifact Registry 代码库: gcloud CLI:
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \ --substitutions=_REPO_NAME="REPO_NAME"
将
REPO_NAME
替换为您的 Artifact Registry 代码库的名称。如需在使用构建触发器进行构建时指定 Artifact Registry 代码库,请在创建构建触发器时,在替代变量字段中指定 Artifact Registry 代码库的名称。
后续步骤
- 了解如何在 Compute Engine 上执行蓝绿部署。
- 了解如何构建容器映像。
- 了解如何排查构建错误。