您可以配置自动化的 Image Builder 流水线,以便在您将配置更改推送到 Git 代码库(例如推送到 main)时运行。自动针对代码库事件执行 build 可确保 Cloud Build 在代码审核或合并后立即验证、构建自定义操作系统映像并将其发布到 Compute Engine 和 Artifact Registry。
准备工作
- 完成准备环境中的环境设置步骤。
- 如果您打算使用 Terraform 部署流水线或自动执行代码库中的构建,请使用 Cloud Build 代码库 (
2nd gen) 或 Developer Connect 连接链接连接您的 GitHub、GitLab 或 Bitbucket 代码库。 - 确保您的代码库包含
cloudbuild.yaml编排文件、imagebuilder.yaml配方文件以及所有引用的 build 脚本。 - 如果您计划使用 Terraform,请安装 Terraform CLI 1.3 版或更高版本。
-
如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Cloud de Confiance by S3NS 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
选择标签页以了解您打算如何使用本页面上的示例:
gcloud
-
安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud init
-
- 设置默认区域和可用区。
-
安装 Google Cloud CLI。
-
配置 gcloud CLI 以使用您的联合身份。
如需了解详情,请参阅使用联合身份登录 gcloud CLI。
-
为您的用户账号创建本地身份验证凭证:
gcloud auth application-default login
如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI。
Terraform
如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭据。
如需了解详情,请参阅 为本地开发环境设置身份验证。
所需的角色
如需获得创建代码库事件触发器所需的权限,请让管理员向您授予项目的以下 IAM 角色:
- Cloud Build Editor (
roles/cloudbuild.builds.editor) - Service Account User (
roles/iam.serviceAccountUser)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
配置代码库自动化
您可以使用 gcloud CLI 或 Terraform 配置代码库事件触发器。选择以下任一标签页来配置代码库触发器:
gcloud
您可以使用 gcloud builds
triggers create 命令并直接指向已关联的第 2 代代码库链接 (--repository) 来创建自动化代码库触发器。
gcloud builds triggers create repository \
--name="TRIGGER_NAME" \
--repository="projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/repositories/REPO_NAME" \
--branch-pattern="^main$" \
--build-config="CLOUDBUILD_YAML_PATH" \
--service-account="projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL" \
--substitutions="_GCS_WORKDIR=gs://STAGING_BUCKET/workdir/,_IMAGE_BUILDER_CONFIG_PATH=RECIPE_PATH,_SERVICE_ACCOUNT=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL,_IMAGE_OUTPUT_PATH=image-builder/binaryOut" \
--region=REGION \
--project=PROJECT_ID
替换以下内容:
TRIGGER_NAME:触发器的名称,例如git-push-custom-os-builder。PROJECT_ID:您的项目 ID。REGION:代码库连接的托管区域以及映像自定义流水线作业的运行区域,例如us-central1。CONNECTION_NAME:Developer Connect 连接的名称,例如github-connection。REPO_NAME:关联的 Git 代码库名称。CLOUDBUILD_YAML_PATH:本地目录中cloudbuild.yaml的相对路径。SERVICE_ACCOUNT_EMAIL:您的 build 服务账号的确切电子邮件地址。STAGING_BUCKET:您的 Cloud Storage 临时workdir存储桶名称。RECIPE_PATH:代码库中imagebuilder.yaml的相对路径。
Terraform
如需使用 Terraform 配置自动化代码库触发器,请完成以下步骤:
将触发器资源添加到
main.tf配置文件中:resource "google_cloudbuild_trigger" "repository_trigger" { name = "TRIGGER_NAME" location = "REGION" project = "PROJECT_ID" description = "Triggers custom OS image builds on repository push events" repository_event_config { repository = "projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/repositories/REPO_NAME" push { branch = "^main$" } } filename = "CLOUDBUILD_YAML_PATH" substitutions = { _GCS_WORKDIR = "gs://STAGING_BUCKET/workdir/" _IMAGE_BUILDER_CONFIG_PATH = "RECIPE_PATH" _SERVICE_ACCOUNT = "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL" } }替换以下内容:
TRIGGER_NAME:触发器的名称,例如git-push-custom-os-builder。PROJECT_ID:您的项目 ID。REGION:代码库连接托管所在的 Cloud de Confiance 区域,例如us-central1。CONNECTION_NAME:Developer Connect 连接的名称,例如github-connection。REPO_NAME:关联的 Git 代码库名称。CLOUDBUILD_YAML_PATH:本地目录中cloudbuild.yaml的相对路径。STAGING_BUCKET:您的 Cloud Storage 临时存储桶名称。RECIPE_PATH:代码库中imagebuilder.yaml的相对路径。SERVICE_ACCOUNT_EMAIL:您的 build 服务账号的电子邮件地址。
部署更新后的 Terraform 配置:
terraform plan terraform apply
如需查看完整的多文件 Terraform 基础设施项目结构,请参阅使用 Terraform 创建和管理流水线。
后续步骤
- 了解如何使用 Cloud Scheduler 定期安排自定义操作系统映像构建,以便进行安全补丁更新。
- 了解支持的自定义操作(
Shell、FileCopy、UpdateKernelCommandLine、InstallGPU)。