在存放區事件發生時自動執行建構作業

您可以設定自動化 Image Builder 管道,每當您將設定變更推送至 Git 存放區 (例如推送至 main) 時,系統就會執行管道。在存放區事件中自動執行建構作業,可確保 Cloud Build 在程式碼審查或合併後,立即驗證、建構及發布自訂 OS 映像檔至 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:建構服務帳戶的確切電子郵件地址。
  • STAGING_BUCKET:Cloud Storage 暫存 workdir bucket 名稱。
  • 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 暫存 bucket 名稱。
    • RECIPE_PATH:存放區中 imagebuilder.yaml 的相對路徑。
    • SERVICE_ACCOUNT_EMAIL:建構服務帳戶的電子郵件地址。
  2. 部署更新後的 Terraform 設定:

    terraform plan
    terraform apply
    

    如要查看完整的多檔案 Terraform 基礎架構專案結構,請參閱「使用 Terraform 建立及管理管道」。

後續步驟