Slack 通知を構成する

Cloud Build は、Slack や SMTP サーバーなどの選択したチャネルに通知を送信することで、ビルド更新を通知します。このページでは、Slack Notifier を使用して通知を構成する方法について説明します。

始める前に

  • Cloud Build, Compute Engine, Cloud Run, Pub/Sub, and Secret Manager API を有効にします。

    API を有効にする

Cloud Build Notifier

Cloud Build は、すべてのビルドイベントの更新とビルド メタデータを cloud-builds トピックの Pub/Sub に送信します。Cloud Build Notifier は、そのトピックをリッスンし、受信したメッセージをフィルタして、サービスにメッセージを送信するように構成できます。

Cloud Build Notifier は Cloud Run でコンテナとして実行される Docker イメージです。サブスクライバー アプリケーションによってポーリングされると、Cloud Build Notifier は push サブスクリプションを使用して構成済みのサービスにメッセージを配信します。どの Notifier も Cloud Storage に格納された構成に共通の YAML 仕様を使用します。

Cloud Build では、デプロイ可能な Notifier イメージが cloud-build-notifiers リポジトリで管理されています。次の表に、使用可能な Notifier を示します。

Notifier 説明
bigquery BigQuery テーブルにビルドデータを書き込みます。
http 別の HTTP エンドポイントに JSON ペイロードを送信します。
slack Slack Webhook を使用して、Slack チャンネルにメッセージを投稿します。
smtp SMTP サーバー経由でメールを送信します。
bigquery ビルドデータを BigQuery インスタンスに push します。

Slack 通知を構成する

Slack Notifier を使用して Slack 通知を構成するには:

  1. 目的の Slack ワークスペースに Slack アプリを作成します。

  2. Cloud Build から Slack にメッセージを投稿するには、受信 Webhook を有効にします。

  3. Slack アプリに移動して、受信 Webhook の URL を探します。URL は次のようになります。

    http://hooks.slack.com/services/...
    
  4. 受信 Webhook URL をシークレット マネージャーに保存します。

    1. Google Cloud Console で [シークレット マネージャー] ページを開きます。

      [シークレット マネージャー] ページを開く

    2. [シークレットの作成] をクリックします。

    3. シークレットの名前を入力します。

    4. [シークレットの値] の下に、Slack アプリの受信 Webhook URL を追加します。

    5. シークレットを保存するには、[シークレットの作成] をクリックします。

  5. Cloud Run サービス アカウントにシークレットのアクセス権を付与します。

    1. Google Cloud Console の IAM ページに移動します。

      [IAM] ページを開く

    2. プロジェクトに関連付けられている Compute Engine のデフォルトのサービス アカウントを見つけます。

      Compute Engine のデフォルトのサービス アカウントは次のようになります。

      project-number-compute@developer.gserviceaccount.com
      

      Compute Engine のデフォルトのサービス アカウントをメモしておきます。

    3. Google Cloud Console で [シークレット マネージャー] ページを開きます。

      [シークレット マネージャー] ページを開く

    4. Slack アプリのシークレットを含むシークレット名をクリックします。

    5. [権限] タブで、[メンバーを追加] をクリックします。

    6. プロジェクトに関連付けられている Compute Engine のデフォルトのサービス アカウントをメンバーとして追加します。

    7. ロールとして Secret Manager のシークレット アクセサー権限を選択します。

    8. [保存] をクリックします。

  6. Cloud Run サービス アカウントに、Cloud Storage バケットに対する読み取りと書き込みの権限を付与します。

    1. Google Cloud Console の IAM ページに移動します。

      [IAM] ページを開く

    2. プロジェクトに関連付けられている Compute Engine のデフォルトのサービス アカウントを見つけます。

      Compute Engine のデフォルトのサービス アカウントは次のようになります。

      project-number-compute@developer.gserviceaccount.com
      
    3. Compute Engine のデフォルトのサービス アカウントを含む行の鉛筆アイコンをクリックします。[権限を編集] タブが表示されます。

    4. [別の役割を追加] をクリックします。

    5. 次のロールを追加します。

      • ストレージ オブジェクト閲覧者
    6. [保存] をクリックします。

  7. Notifier 構成ファイルを作成し、ビルドイベントに Slack Notifier とフィルタを構成します。

    次の Notifier 構成ファイルの例では、filter フィールドで Common Expression Language を使用し、変数 build を指定し、SUCCESS ステータスでビルドイベントをフィルタリングします。

    apiVersion: cloud-build-notifiers/v1
    kind: SlackNotifier
    metadata:
      name: example-slack-notifier
    spec:
      notification:
        filter: build.status == Build.Status.SUCCESS
        delivery:
          webhookUrl:
            secretRef: webhook-url
      secrets:
      - name: webhook-url
        value: projects/project-id/secrets/secret-name/versions/latest
    

    ここで

    • webhook-url は、この例で使用されている構成変数です。シークレット マネージャーに格納されている Slack Webhook URL のパスを参照します。ここで指定する変数名は、secretsname フィールドに一致させる必要があります。
    • project-id は Cloud プロジェクトの ID です。
    • secret-name は Slack Webhook URL を含むシークレットの名前です。

    サンプルについては、Slack Notifier の Notifier 構成ファイルをご覧ください。

    フィルタに使用できるその他のフィールドについては、ビルドリソースをご覧ください。その他のフィルタリングの例については、通知内のビルドのフィルタリングをご覧ください。

  8. 通知機能構成ファイルを Cloud Storage バケットにアップロードします。

    1. Cloud Storage バケットがない場合は、次のコマンドを実行してバケットを作成します。ここで、bucket-name命名要件に従って、バケットに付ける名前です。

      gsutil mb gs://bucket-name/
      
    2. Notifier 構成ファイルをバケットにアップロードします。

      gsutil cp config-file-name gs://bucket-name/config-file-name
      

      ここで

      • bucket-name はバケットの名前です。
      • config-file-name は構成ファイルの名前です。
  9. Notifier を Cloud Run にデプロイします。

     gcloud run deploy service-name \
       --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/slack:latest \
       --no-allow-unauthenticated \
       --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-id
    

    ここで

    • service-name は、イメージをデプロイする Cloud Run サービスの名前です。
    • config-path は、Slack Notifier の Notifier 構成ファイルのパスで、gs://bucket-name/config-file-name です。
    • project-id は Cloud プロジェクトの ID です。

    gcloud run deploy コマンドは、Cloud Build が所有する Artifact Registry からホストされたイメージの最新バージョンを pull します。Cloud Build は 9 か月間、Notifier イメージをサポートします。9 か月を過ぎると、イメージのバージョンは削除されます。以前のイメージ バージョンを使用する場合は、gcloud run deploy コマンドの image 属性でイメージタグの完全なセマンティック バージョンを指定する必要があります。以前のイメージ バージョンとタグは、Artifact Registry にあります。

  10. プロジェクトに認証トークンを作成する Pub/Sub 権限を付与します。

     gcloud projects add-iam-policy-binding project-id \
       --member=serviceAccount:service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com \
       --role=roles/iam.serviceAccountTokenCreator
    

    ここで

    • project-id は Cloud プロジェクトの ID です。
    • project-number は Cloud プロジェクト番号です。
  11. Pub/Sub サブスクリプション ID を表すサービス アカウントを作成します。

    gcloud iam service-accounts create cloud-run-pubsub-invoker \
      --display-name "Cloud Run Pub/Sub Invoker"
    

    cloud-run-pubsub-invoker を使用するか、Google Cloud プロジェクト内で一意の名前を使用します。

  12. cloud-run-pubsub-invoker サービスアカウントに Cloud Run Invoker 権限を付与します。

    gcloud run services add-iam-policy-binding service-name \
       --member=serviceAccount:cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.com \
       --role=roles/run.invoker
    

    ここで

    • service-name は、イメージをデプロイする Cloud Run サービスの名前です。
    • project-id は Cloud プロジェクトの ID です。
  13. cloud-builds トピックを作成して、Notifier のビルド更新メッセージを受信します。

    gcloud pubsub topics create cloud-builds
    
  14. Notifier に Pub/Sub push サブスクライバーを作成します。

     gcloud pubsub subscriptions create subscriber-id \
       --topic=cloud-builds \
       --push-endpoint=service-url \
       --push-auth-service-account=cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.com
    

    ここで

    • subscriber-id は、サブスクリプションに付ける名前です。
    • service-url は、Cloud Run によって生成された、新しいサービスの URL です。
    • project-id は Cloud プロジェクトの ID です。

これで Cloud Build プロジェクトの通知が設定されました。次にビルドを呼び出したときに、構成したフィルタとビルドが一致すると、Slack に通知が届きます。

次のステップ