根据代码库事件自动执行构建

您可以配置自动化的 Image Builder 流水线,以便在您将配置更改推送到 Git 代码库(例如推送到 main)时运行。自动针对代码库事件执行 build 可确保 Cloud Build 在代码审核或合并后立即验证、构建自定义操作系统映像并将其发布到 Compute Engine 和 Artifact Registry。

准备工作

所需的角色

如需获得创建代码库事件触发器所需的权限,请让管理员向您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

配置代码库自动化

您可以使用 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 配置自动化代码库触发器,请完成以下步骤:

  1. 将触发器资源添加到 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 服务账号的电子邮件地址。
  2. 部署更新后的 Terraform 配置:

    terraform plan
    terraform apply
    

    如需查看完整的多文件 Terraform 基础设施项目结构,请参阅使用 Terraform 创建和管理流水线

后续步骤