Cloud Build は、Slack や SMTP サーバーなどの選択したチャネルに通知を送信することで、ビルド更新を通知します。このページでは、SMTP Notifier を使用して通知を構成する方法について説明します。
始める前に
- Cloud Build, Compute Engine, Cloud Run, Pub/Sub, and Secret Manager API を有効にします。
gcloud
コマンドライン ツールをインストールします。
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 します。 |
メール通知を構成する
メール通知を送信するには、SMTP サーバーが稼働している必要があります。また、そのサーバーのアカウントに対するアクセス権も必要です。通知の送信に使用するアカウントのユーザー名とパスワードが必要になります。生成されるメールの量が SMTP サーバーの配信割り当てを超えないようにする必要があります。
次のセクションでは、SMTP Notifier を使用してメール通知を手動で構成する方法について説明します。構成を手動で行わず、自動化する場合は、通知の構成の自動化をご覧ください。
メールによる通知を構成するには:
送信者のメール アカウントのパスワードをシークレット マネージャーに保存します。
Google Cloud Console で [シークレット マネージャー] ページを開きます。
[シークレットの作成] をクリックします。
シークレットの名前を入力します。
[シークレットの値] に、送信者のメール アカウントのパスワードを追加します。
シークレットを保存するには、[シークレットの作成] をクリックします。
Cloud Run サービス アカウントにシークレットのアクセス権を付与します。
Google Cloud Console の IAM ページに移動します。
プロジェクトに関連付けられている Compute Engine のデフォルト サービス アカウントを見つけます。
Compute Engine のデフォルトのサービス アカウントは次のようになります。
project-number-compute@developer.gserviceaccount.com
Compute Engine のデフォルトのサービス アカウントをメモしておきます。
Google Cloud Console で [シークレット マネージャー] ページを開きます。
送信者のメール アカウント パスワードのシークレットを含むシークレット名をクリックします。
[権限] タブで、[メンバーを追加] をクリックします。
プロジェクトに関連付けられている Compute Engine のデフォルトのサービス アカウントをメンバーとして追加します。
ロールとして Secret Manager のシークレット アクセサー権限を選択します。
[保存] をクリックします。
Cloud Run サービス アカウントに、Cloud Storage バケットに対する読み取りと書き込みの権限を付与します。
Google Cloud Console の IAM ページに移動します。
プロジェクトに関連付けられている Compute Engine のデフォルトのサービス アカウントを見つけます。
Compute Engine のデフォルトのサービス アカウントは次のようになります。
project-number-compute@developer.gserviceaccount.com
Compute Engine のデフォルトのサービス アカウントを含む行の鉛筆アイコンをクリックします。[権限を編集] タブが表示されます。
[別の役割を追加] をクリックします。
次のロールを追加します。
- ストレージ オブジェクト閲覧者
[保存] をクリックします。
Notifier 構成ファイルを作成し、ビルドイベントに SMTP Notifier とフィルタを構成します。
次の Notifier 構成ファイルの例では、
filter
フィールドで Common Expression Language を使用し、変数build
を指定し、SUCCESS
ステータスでビルドイベントをフィルタリングします。apiVersion: cloud-build-notifiers/v1 kind: SMTPNotifier metadata: name: example-smtp-notifier spec: notification: filter: build.status == Build.Status.SUCCESS delivery: server: server-host-name port: "port" sender: sender-email from: from-email recipients: - recipient-email # optional: more emails here password: secretRef: smtp-password secrets: - name: smtp-password value: projects/project-id/secrets/secret-name/versions/latest
ここで
server-host-name
は、SMTP サーバーのアドレスです。port
は、SMTP リクエストを処理するポートです。この値は文字列として指定する必要があります。sender-email
は、指定された server-host-name に表示される送信者アカウントのメールアドレスです。from-email
は、受信者に表示されるメールアドレスです。recipient-email
は、送信者からメッセージを受信する 1 つ以上のメールアドレスのリストです。smtp-password
は、シークレット マネージャーに保存されている送信者のメール アカウントのパスワードを参照するためにこの例で使用する構成変数です。ここで指定する変数名は、secrets
のname
フィールドに一致させる必要があります。project-id
は Cloud プロジェクトの ID です。secret-name
は、送信者のメールアカウントのパスワードを含むシークレットの名前です。
サンプルについては、SMTP Notifier の構成ファイルをご覧ください。
フィルタに使用できるその他のフィールドについては、ビルドリソースをご覧ください。その他のフィルタリングの例については、通知内のビルドのフィルタリングをご覧ください。
通知機能構成ファイルを Cloud Storage バケットにアップロードします。
Cloud Storage バケットがない場合は、次のコマンドを実行してバケットを作成します。ここで、
bucket-name
は命名要件に従って、バケットに付ける名前です。gsutil mb gs://bucket-name/
Notifier 構成ファイルをバケットにアップロードします。
gsutil cp config-file-name gs://bucket-name/config-file-name
ここで
bucket-name
はバケットの名前です。config-file-name
は構成ファイルの名前です。
Notifier を Cloud Run にデプロイします。
gcloud run deploy service-name \ --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/smtp:latest \ --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-id
ここで
service-name
は、イメージをデプロイする Cloud Run サービスの名前です。config-path
は、SMTP 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 にあります。プロジェクトに認証トークンを作成する 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 プロジェクト番号です。
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 プロジェクト内で一意の名前を使用します。cloud-run-pubsub-invoker
サービスアカウントに Cloud RunInvoker
権限を付与します。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 です。
cloud-builds
トピックを作成して、Notifier のビルド更新メッセージを受信します。gcloud pubsub topics create cloud-builds
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 プロジェクトの通知が設定されました。次にビルドを呼び出すときに、構成したフィルタとビルドが一致すると、recipients
が通知を含むメールを受信します。
次のステップ
- Slack Notifier を使用して通知を構成する方法を学習する。
- HTTP Notifier を使用して通知を構成する方法を学習する。
- SMTP Notifier を使用して通知を構成する方法を学習する。
- ビルド通知をサブスクライブする方法を学習する。
- Cloud Build ビルド構成ファイルを作成する方法を学習する。