Firebase HostingのデプロイをWebhook(API)経由で行う

公開日時

前回の記事でCloud BuildでFirebase Hostingのデプロイを行うようにした。

今回はCloud BuildのトリガーにWebhookを設定して、Webhook(API)経由でFirebase Hostingへのデプロイが行えるようにする。

cloud build

トリガーの設定は公式ドキュメントに沿って進めていく。

なお、Webhookトリガーはまだプレビュー版となっており、今後手順が変わる可能性もあるので注意。

事前対応

  • Cloud Build and Secret Manager API を有効にする
  • 認証情報ページでAPIキーを作成
    • APIの制限で「Cloud Build API」のみ有効にした
cloud build webhook api key

Cloud Buildでの対応

  • トリガー => トリガーを作成
  • イベントの「Webhookイベント」にチェック
  • シークレットを新規作成
cloud build webhook api secret
  • Webhook URLのプレビューに記載されているURLをメモしておく
https://cloudbuild.googleapis.com/v1/projects/<project_id>/triggers/<trigger_name>:webhook?secret=<SECRET_KEY>&key=<API_KEY>
  • 構成 => 形式 => Cloud Build 構成ファイル(yaml または json)

Webhook経由でデプロイを実行

Webhook URLに対しPOSTリクエストを投げるとCloud Buildが実行される。

curlだと↓のようになる。

curl -v -XPOST -d '{}' -H 'Content-Type: application/json' 'https://cloudbuild.googleapis.com/v1/projects/<project_id>/triggers/<trigger_name>:webhook?secret=<SECRET_KEY>&key=<API_KEY>'

これでWebhook(API)経由でFirebase Hostingへのデプロイが行えるようになった。

最終的にはこのAPIをCloud Function等で呼び出せるようにして、サイト上に設置したデプロイボタンをトリガーにデプロイできるようにした。

Webhook経由でのデプロイはなかなか便利。

補足

Github Actionsでも workflow_dispatch を使うと同じようなことはできそうだが、API呼び出しの際にPersonal Access Tokenを付与する必要がある。

Personal Access Tokenの場合、全リポジトリに対する権限しか設定できないため権限が強すぎると判断して今回はCloud Buildを利用した。

Cloud Buildの場合は↓となっており、Github ActionsのWebhookよりも厳密な権限管理ができる。

  • Webhook呼び出しの際にはプロジェクト専用に作成したAPIキーとシークレットを利用している
  • Build時に使用するGitHubのトークンについてはCloud Build GitHubアプリに対して許可したリポジトリのみが対象となっている

参考


Related #firebase

SharedArrayBuffer updates in Android Chrome 88 and Desktop Chrome 92

クロスオリジン分離対応を実施

Firebase Auth Googleログイン時のリダイレクトドメインを変更する

CNAME追加とHostingの「カスタムドメインを追加」を行う

Firebase Emulator Suiteで起動しているFunctionsから本番のFirestoreにアクセスする

functionsのみエミュレータを使うようにするとできる

Firebase Functions呼び出し時に Error: function terminated. が発生した場合

firebase functions:logで詳細を確認できる

Local Emulator Suiteを使ってFirestoreのローカル開発を行う際に初期データ(seeds)を用意する

ローカル管理画面でDeveloperToolsを開くとwindow.firestoreが使える

「Unit testing security rules with the Firebase Emulator Suite」でセキュリティルールのtestを学ぶ

ローカルでセキュリティルールのtestができるようになったのはありがたい