Cloud Build は、選択したチャネルに通知を送信することで、ビルド ステータスの更新を通知します。Cloud Build によって管理される通知機能(Slack や SMTP など)に加え、提供されたライブラリを cloud-build-notifiers リポジトリで使用して、独自の Notifier を作成することもできます。
このページでは、独自の Notifier の作成方法について説明します。
始める前に
-
Enable the Cloud Build, Cloud Run, Pub/Sub, and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Go プログラミング言語をインストールします。
Google Cloud CLI をインストールする
設定
マシンでターミナル ウィンドウを開きます。
cloud-build-notifiers リポジトリのクローンを作成し、そのリポジトリに移動します。
git clone https://github.com/GoogleCloudPlatform/cloud-build-notifiers.git && cd cloud-build-notifiers独自の Notifier 用のディレクトリを追加して、そのディレクトリに移動します。DIRECTORY_NAME はディレクトリの名前です。
mkdir DIRECTORY_NAME && cd DIRECTORY_NAME新しいディレクトリで Go モジュールを初期化します。DIRECTORY_NAME は新しいディレクトリの名前です。
go mod init github.com/GoogleCloudPlatform/cloud-build-notifiers/DIRECTORY_NAMEこれで、ディレクトリに
go.modファイルが表示されます。次の行を
go.modファイルに追加して、最新バージョンの Notifier を使用していることを確認します。replace github.com/GoogleCloudPlatform/cloud-build-notifiers/lib/notifiers => ../
これで依存関係がセットアップされ、独自の Notifier を作成する準備ができました。
独自の Notifier の作成
cloud-build-notifiers には lib/notifiers ディレクトリが含まれています。lib/notifiers ディレクトリには notifier.go という名前のファイルがあります。このファイルには、独自の Notifier を作成するために使用できるフレームワークが含まれています。
メインファイル内に Notifier を作成するには、2 つのメソッドを定義する必要があります。
新しいディレクトリに、
main.goという名前のファイルを作成します。main.goで、Notifier ライブラリ フレームワークとその他の依存関係をインポートします。Notifier のメイン メソッドを定義します。この例では、
loggerは Notifier の名前です。mainメソッドは、notifier.goファイルで定義されたMainメソッドを使用します。これは、Notifier バイナリの設定に使用されます。インターフェースの変数を定義する Notifier の構造体を定義します。この例では、
loggerは Notifier の名前です。Notifier 機能を追加します。この Notifier インターフェースは、以下の 2 つのメソッドで定義されます。
SetUp:SetUpメソッドは構成を受け入れ、シークレットを取得して、指定されたフィルタを構成から pull し、通知の送信に使用できる Common Expression Language 述語として格納します。CEL の詳細については、cel-specリポジトリをご覧ください。SendNotification:SendNotificationメソッドは、選択したチャンネルまたはサービスに通知を送信するために使用されます。Notifier の定義は、
notifier.goと Go のドキュメントで確認できます。以下の例では、Notifier インターフェースが、ビルドログを出力するための
SetUpとSendNotificationメソッドを使用して定義されています。loggerは Notifier の名前です。最終的な
main.goファイルは以下のようになります。この例では、loggerが Notifier の名前として使用されます。
次に、Notifier を構成します。
通知の構成
Notifier 構成ファイルを作成し、ビルドイベントに Notifier とフィルタを構成します。
次の Notifier 構成ファイルの例では、
filterフィールドで CEL と使用可能な変数buildを使用して、SUCCESSステータスのビルドイベントをフィルタリングしています。ここで
logging-sampleは、Notifier の名前です。
フィルタに使用できるその他のフィールドについては、ビルドリソースをご覧ください。フィルタリングに関するその他の例については、CEL を使用してビルドイベントをフィルタリングするをご覧ください。
通知機能構成ファイルを Cloud Storage バケットにアップロードします。
Cloud Storage バケットがない場合は、次のコマンドを実行してバケットを作成します。ここで、BUCKET_NAME は命名要件に従って、バケットに付ける名前です。
gcloud storage buckets create gs://BUCKET_NAME/Notifier 構成ファイルをバケットにアップロードします。
gcloud storage cp CONFIG_FILE_NAME gs://BUCKET_NAME/CONFIG_FILE_NAMEここで
BUCKET_NAMEはバケットの名前です。CONFIG_FILE_NAMEは構成ファイルの名前です。
Notifier をビルドしてデプロイします。
logging-sampleの Dockerfile を作成します。次の
cloudbuild.yamlファイルを使用して Notifier をビルドしてデプロイします。ここで
_CONFIG_PATHは、Notifier 構成へのパスです(gs://BUCKET_NAME/CONFIG_FILE_NAME.yamlなど)。
cloudbuild.yamlを実行するには、Notifier パスを置換変数として渡します。gcloud builds submit . --substitutions=_CONFIG_PATH=gs://BUCKET_NAME/CONFIG_FILE_NAMEプロジェクトに認証トークンを作成する 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は、実際の Google Cloud プロジェクトの ID です。PROJECT_NUMBERは Google 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は、実際の Google Cloud プロジェクトの ID です。
cloud-buildsトピックを作成して、Notifier のビルド更新メッセージを受信します。gcloud pubsub topics create cloud-buildsビルド構成ファイルでカスタム トピック名を定義して、メッセージがカスタム トピックに送信されるようにすることもできます。この場合、同じカスタム トピック名でトピックを作成します。
gcloud pubsub topics create topic-name詳細については、ビルド通知の Pub/Sub トピックをご覧ください。
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は、実際の Google Cloud プロジェクトの ID です。
これで Cloud Build プロジェクトの通知が設定されました。次にビルドを呼び出したときに、構成したフィルタとビルドが一致すると、チャネルに通知が届きます。
テスト通知
gcloud builds submit コマンドを実行してビルドを呼び出し、このガイドで説明される例の通知をテストできます。
次の例では、構成パスとして success.yaml を指定しています。このコマンドを実行すると、最小限のビルドが成功します。また、ビルドログの出力を確認できます。
gcloud builds submit --no-source --config=success.yaml
ここで、success.yaml は次のようになります。
steps:
- name: busybox
args: ["true"]
次の例では、構成パスとして failure.yaml を指定しています。このコマンドを実行すると、ビルドが失敗します。ビルドログの出力ではなく、ソースで指定した CEL フィルタに一致する項目がないことを示す出力が表示されます。
gcloud builds submit --no-source --config=failure.yaml
ここで、failure.yaml は次のようになります。
steps:
- name: busybox
args: ["false"]
Cloud Run サービスログへのログ出力以外のタスクを実行するように構成された Notifier を作成している場合、gcloud builds submit コマンドを実行して通知をテストすることもできます。ビルドに関連するエラーを確認するには、サービスの Cloud Run ログを確認します。詳しくは、Cloud Run でログを表示するをご覧ください。
次のステップ
- Cloud Build Notifier の詳細を確認します。
- ビルド通知をサブスクライブする方法を学習する。