Google Cloud Build 便利ですよね。
Google Cloud Build の良いところは、ビルドを開始するトリガーが豊富で簡単に設定できるところだと思います。
一番よく使うのは GitHub リポジトリとの連携だと思いますが、Pub/Sub メッセージをトリガーにした使い方もかなり便利です。
そこでこの記事では、Google Cloud Pub/Sub メッセージをトリガーにした Cloud Build に任意のパラメータを渡す方法を説明します。
最初に Pub/Sub メッセージスキーマとトピックを定義しておきましょう。
今回は例として user_id
というパラメータを Cloud Build に渡すものとして話を進めていきます。
Pub/Sub スキーマは下記のようになります。
{
"type": "record",
"name": "Avro",
"fields": [
{
"name": "user_id",
"type": "string"
}
]
}
スキーマを作成したらトピックを作成します。トピック作成時に先ほど作成したスキーマを指定しましょう。
次に Cloud Build トリガーを作成します。
イベントは「Pub/Sub メッセージ」を選び、先ほど作成したトピックを選択しましょう。
トリガーを作成すると、Pub/Sub 側にサブスクリプションが自動で作成されます。
Pub/Sub メッセージのデータには body.message.data
でアクセスできます。
cloudbuild.yaml
に body.message.data.user_id
を定数 _USER_ID
として追加しておきます。
steps:
- id: 'Echo USER_ID'
name: node:18.15
entrypoint: bash
args:
- -ceux
- |
echo ${_USER_ID}
substitutions:
_USER_ID: $(body.message.data.user_id)
options:
dynamic_substitutions: true
timeout: 900s
最後にアプリケーションから Pub/Sub トピックをパブリッシュします。
Google Cloud SDK を使うと簡単に実装できます。下記は TypeScript の例です。
publish()
にはJSONを文字列で渡すのではなく、バイナリデータで渡してあげる必要があることに注意してください。
import { PubSub } from '@google-cloud/pubsub'
const pubsub = new PubSub()
const topicName = 'topic-name'
const message = { user_id: 'abcd...' }
await pubsub.topic(topicName).publish(Buffer.from(JSON.stringify(message)))
成功すれば Cloud Build でビルドが実行されます。
以上です。
この記事では、Google Cloud Pub/Sub メッセージをトリガーにした Cloud Build に任意のパラメータを渡す方法を説明しました。
コメントを送る
コメントはブログオーナーのみ閲覧できます