Site cover image
📢Google Cloud Pub/SubトピックをトリガーにしたCloud Buildに任意のパラメータを渡す

Google Cloud Build 便利ですよね。

Google Cloud Build の良いところは、ビルドを開始するトリガーが豊富で簡単に設定できるところだと思います。

Image in a image block
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 メッセージ」を選び、先ほど作成したトピックを選択しましょう。

Image in a image block
作成したトピックを選択しよう

トリガーを作成すると、Pub/Sub 側にサブスクリプションが自動で作成されます。

Pub/Sub メッセージのデータには body.message.data でアクセスできます。

cloudbuild.yamlbody.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 に任意のパラメータを渡す方法を説明しました。


💕
記事が参考になったら少額を寄付いただけると励みになります。
Thank you!
Thank you!
URLをコピーしました

コメントを送る

コメントはブログオーナーのみ閲覧できます