Cloud Build Webhook トリガーを始めよう(基本編)

Rnrn
google-cloud-jp
Published in
8 min readAug 1, 2021

こんにちは、Cloud Support の Rnrn です。今日は任意のタイミングで HTTP リクエストを投げることで Cloud Build のビルドジョブを起動できる Webhook トリガーをご紹介したいと思います。今回は基本の作成方法とレポジトリの連携手順を確認し、次回応用編では特定の条件の時のみジョブを走らせるフィルタやリクエスト時に決まる変数の受け渡しなどを扱います。

Webhookトリガーの概要

最初に Webhook トリガーがどのようなものか簡単にご説明します。Cloud Build Webhook トリガーを作成すると、Webhook 用の URL が生成されます。この URL に POST リクエストを送ることで、予めトリガーと紐付けておいたビルド構成ファイルをベースにビルドジョブが走るというものです。

トリガーの作成

まずは最小構成で Webhook トリガーを作成してみます。はじめに、トリガーの名前、必要なら説明やタグを設定し、イベントは「Webhook イベント」を選択します。

次に Webhook URL の一部になるシークレットを指定します。新規作成を選ぶと値はおまかせでシークレットが生成されます。既存のものを使いたい場合はそちらを選択しましょう。「ソース」で特定のリポジトリと紐付けることができますが、これは必須ではないため今は飛ばします。

「構成」ではトリガーによって起動するビルドジョブの内容を設定します。今回は Cloud Build 構成ファイルを利用し、インライン(レポジトリにおいてあるファイルを参照するのではなく直接ビルド設定を記述する)を利用します。「エディタを開く」を押すとデフォルトで Hello World を出力するだけのビルド設定が入力されているので一旦そのままにします。

今回はシンプルな構成にするため、ここまで入力ができたら最下部の「作成」を押します。ちなみに、新規でシークレットを作成した場合はこの「作成」のタイミングで Cloud Build のサービスアカウントにシークレットアクセサーの権限が付与されます。

例えば新規プロジェクトなどで 1 度も Cloud Build を使っていない状態でトリガーを作成するとまだサービスアカウントが作られていないためここで権限の付与に失敗することがあります。そういう時はまず Cloud Build API が有効化されているか確認してみましょう。

おまけとして、gcloud 経由で今回と同じような構成のトリガーを作成する場合は以下のようなコマンドになります。

gcloud alpha builds triggers create webhook \
--name=webhook-simple-trigger \
--secret=projects/<PROJECT_NUMBER>/secrets/<SECRET_NAME>/versions/<VERSION> \
--inline-config=build.yaml \
--branch=main

コマンド経由の場合、シークレットは既存のものを指定する必要があります。また、ビルド構成がインラインの場合は手元でビルド構成ファイルを用意し、そのファイルに向けたパスを指定します。このコマンドはまだ alpha 段階であり仕様変更等があり得るため利用する際は公式ドキュメントを参照することをおすすめします。

トリガーの起動

それでは構成したトリガーにリクエストを投げてビルドを実行してみましょう。コンソールからトリガーの詳細ページを開くと、シークレットの下で URL のプレビューを表示することができます。

この URL を使って以下のような HTTP リクエストを投げてみます。

curl -X POST -d '{}' "https://cloudbuild.googleapis.com/v1/projects/<PROJECT_ID>/triggers/<TRIGGER_NAME>:webhook?key=<API_KEY>&secret=<SECRET_VALUE>"

以下はCloud Shell から呼んだ例ですが、このようになっていればトリガーへのリクエストは正常に処理されています。

admin_@cloudshell:~ (project_id)$ curl -X POST -d '{}' "https://cloudbuild.googleapis.com/v1/projects/<PROJECT_ID>/triggers/<TRIGGER_NAME>:webhook?key=<API_KEY>&secret=<SECRET_VALUE>"
{}
admin_@cloudshell:~ (project_id)$

コンソールから履歴を表示するとビルドの実行が確認できます。この時、リージョンは global にします。例えば Cloud Function などのビルドは Function のリージョンでビルドされますが、2021 年 7 月時点では普通のビルドにリージョンを指定することはできないため global になります。

先程作成した webhook-simple-trigger トリガーで起動された最新のビルド詳細を確認すると、デフォルトのビルドが実行されて Hello World が出力されていることが確認できます。

レポジトリのクローン

これまでの手順で一旦 Webhook トリガーの基本を抑えることができました。実際のユースケースでは特定のレポジトリのコードをクローンしてビルドを構成したいパターンも少なくないと思うので、次にレポジトリのクローン手順を試します。大きく分けて 2 つの方法があるため状況に合わせて選択してください。

①レポジトリを Cloud Build に接続してトリガーと紐付ける方法 : Cloud Build GitHub アプリをインストールした Github レポジトリや Cloud Source Repository のレポジトリなどを使う場合

②任意のレポジトリをビルド構成ファイルで指定してクローンする方法 : レポジトリを Cloud Build と接続せずにクローンする場合

レポジトリを接続する場合

コンソールでトリガーの詳細ページを開き、前半ではスキップした「ソース」セクションでガイドに従ってレポジトリを連携します。そしてビルドする際にクローンするタグまたはブランチを入力します。

また、既に接続されているレポジトリについてはgcloud alpha builds triggers create webhook--repo を使って url を直接指定することもできますが、2021 年 7 月時点では修正中の既知の問題があるためコンソール経由での設定をおすすめします。(2021 年 8 月追記:この問題は修正が完了しました) 連携が完了すると、トリガー一覧で紐付いているレポジトリを確認することができます。

この状態でビルドをトリガーするとジョブのログから問題なくレポジトリのクローンができていることがわかります。

レポジトリを接続しない場合

クラウドビルダーと呼ばれるコンテナイメージを使ってレポジトリをクローンするように設定ファイルを構成する必要があります。Cloud Build が提供している gcr.io/cloud-builders/git を使うことで簡単にセットアップが可能です。

ビルド構成ファイルの書き方は公式レポジトリにサンプルがあるのでぜひ参考にしてみてください。認証が必要な場合はこちらのサンプルのようにSSH Key を使うのがおすすめです。

お疲れさまでした ! これで基本編は終了です。次回応用編ではフィルタや変数の設定を扱うので良かったらそちらも読んでみてください🌱

--

--

Rnrn
google-cloud-jp

Technical Solutions Engineer for Cloud Support