您可以設定自動化 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
-
安裝 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 編輯者 (
roles/cloudbuild.builds.editor) - 服務帳戶使用者 (
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:建構服務帳戶的確切電子郵件地址。STAGING_BUCKET:Cloud Storage 暫存workdirbucket 名稱。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 暫存 bucket 名稱。RECIPE_PATH:存放區中imagebuilder.yaml的相對路徑。SERVICE_ACCOUNT_EMAIL:建構服務帳戶的電子郵件地址。
部署更新後的 Terraform 設定:
terraform plan terraform apply
如要查看完整的多檔案 Terraform 基礎架構專案結構,請參閱「使用 Terraform 建立及管理管道」。
後續步驟
- 瞭解如何使用 Cloud Scheduler,定期安排自訂 OS 映像檔建構作業,以進行安全性修補。
- 瞭解支援的自訂動作 (
Shell、FileCopy、UpdateKernelCommandLine、InstallGPU)。