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

您可以設定自動化 Image Builder 管道,在您將設定變更推送到 Git 存放區時執行,例如推送到 main。自動建構存放區事件可確保 Cloud Build 在程式碼審查或合併後,立即驗證、建構及發布自訂 OS 映像檔至 Compute Engine 和 Artifact Registry。

事前準備

  • 完成「準備環境」一文中的環境設定步驟。
  • 如要使用 Terraform 部署管道,或從存放區自動建構,請使用 Cloud Build 存放區 (2nd gen) 或 Developer Connect 連線連結,連結 GitHub、GitLab 或 Bitbucket 存放區。
  • 請確認存放區包含cloudbuild.yaml協調流程檔案imagebuilder.yaml配方檔案,以及所有參照的建構指令碼。
  • 如果您打算使用 Terraform,請安裝 Terraform CLI 1.3 以上版本。
  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Cloud de Confiance by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上您打算如何使用範例的分頁:

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init
  • 設定預設地區和區域
  • Terraform

    如要在本機開發環境中使用本頁的 Terraform 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

    1. 安裝 Google Cloud CLI。

    2. 設定 gcloud CLI,使用您的聯合身分。

      詳情請參閱「使用聯合身分登入 gcloud CLI」。

    3. 為使用者帳戶建立本機驗證憑證:

      gcloud auth application-default login

      如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

    詳情請參閱 這篇文章,瞭解如何設定本機開發環境的驗證機制。

必要的角色

如要取得建立存放區事件觸發程序所需的權限,請要求管理員在專案中授予您下列 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 建立及管理管道」。

後續步驟