リポジトリ イベントでビルドを自動化する

main への push など、構成の変更を Git リポジトリに push するたびに実行される自動 Image Builder パイプラインを構成できます。リポジトリ イベントでビルドを自動化すると、コードレビューまたはマージ時に、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 バケット名。
  • 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: ビルド サービス アカウントのメールアドレス。
  2. 更新された Terraform 構成をデプロイします。

    terraform plan
    terraform apply
    

    マルチファイル Terraform インフラストラクチャ プロジェクトの完全な構造を確認するには、Terraform を使用してパイプラインを作成して管理するをご覧ください。

次のステップ