Kekeの日記

エンジニア、読書なんでも

Cloud Pub/SubでCloud Buildのビルド通知を受け取ってCloud Functionsをトリガーする

f:id:bobchan1915:20181005060103p:plain

本記事

本記事はCloud Buildのビルド通知をCloud Pub/Subに送ってCloud Functionsをトリガーするというタイトルで、実際のCIの現場で、Buildのビルド後として関数を走らせたいと思います。

目的

Cloud Buildによってビルドが走ると、何かしら処理をしたいときがあります。

もともとCloud BuildはビルドごとにCloud Pub/Subにメッセージが送信されるように設定できるので、それを利用してCloud Functionsを使っていこうかなと思います。

アーキテクチャ

f:id:bobchan1915:20181005011101p:plain

流れ

GCP上でのアーキテクチャの流れを簡略化すると以下の通りです。

f:id:bobchan1915:20181005060103p:plain

必要性

Cloud BuildのビルドリクエストにBash Shellなどを用いて軽量なステップ(例えばWebhookに送信)するなどできますがビルドの結果などは受け取れません。なのでCloud BuildとCloud Pub/Subを使ってCloud Functionsを使う必要があります。

本題

前提

Githubなど、何かしらのプロバイダからトリガーを発火してコンテナイメージが使えるような状態であることを前提とします。

また、今回はCloud Pub/SubのPush式を使って構築します。

設定方法の一例を以下の記事にしています。

www.1915keke.com

Cloud Pub/Subビルドの更新通知の登録方法

Cloud Pub/Subでcloud-buildsの名前のトピックを作成します。

Cloud Functionsのデプロイ

以下のようなコマンドでトピックをイベントとしたCloud Functionsをデプロイします。

gcloud beta functions deploy TestPubSub --trigger-resource cloud-builds --trigger-event google.pubsub.topic.publish

これで準備完了です。

Cloud Buildを手動ビルドする

以下のコマンドで手動ビルドします。

トリガーとして設定されてあるので特に何かを指定する必要はありません。

gcloud builds submit --config=cloudbuild.yaml

するとCloud Loggingにて以下のように確認できました。Build IDが取得できてます。

f:id:bobchan1915:20181005010300p:plain

まとめ

これを設定すれば、ビルドに対してフィードバックを送ることができるのでかなり便利だと思います。

以下のようにLine Botと連携したので便利になりました。

f:id:bobchan1915:20181005183006j:plain

参考文献

Sending Build Notifications  |  Cloud Build  |  Google Cloud