Cloud BuildでFirebase Hostingのデプロイを行う

公開日時
更新日時

Firebase公式GitHub Actionsを使うと、リポジトリへのpushをトリガーにFirebase Hostingへのデプロイができる。

シンプルなサイトであればこれで十分なのだが、今回はリポジトリへのpush以外をトリガーにしてデプロイを行いたかったので、Cloud BuildでFirebase Hostingのデプロイを行うことにした。

Cloud Buildドキュメントに「Firebase へのデプロイ」が用意されているので、この手順に沿ってデプロイ設定を行った。

IAM権限

xxx@cloudbuild.gserviceaccount.com に必要な権限は↓と記載されていたが、 API Keys Admin のロールは見つからなかったので設定しなかった。

必要な IAM 権限

Cloud Build Service Account、Firebase Admin、API Keys Admin のロールを追加します。

もともとCloud Runでも利用しているアカウントだったので、 Firebase 管理者 の権限のみ設定した。

最終的なIAM権限は↓となった。

cloud build iam

firebase cli実行コンテナの作成

firebase コミュニティ ビルダーの使用」の手順に沿って、firebaseコマンド実行コンテナを自分のGCPプロジェクトに追加。

デプロイ対象リポジトリでcloudbuild.yamlを設定

今回はNext.jsで静的ジェネレートしたサイトをFirebase Hostingにデプロイしたかったので、↓のように cloudbuild.yaml を設定した。

# cloudbuild.yaml
steps:
  - name: 'node:14-slim'
    entrypoint: yarn
    args: ['install']
  - name: 'node:14-slim'
    entrypoint: yarn
    args: ['build']
    env:
      - 'NEXT_PUBLIC_FIREBASE_PUBLIC_API_KEY=xxxx'
      - 'NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=xxx.firebaseapp.com'
      - 'NEXT_PUBLIC_FIREBASE_PROJECT_ID=xxx'
      - 'NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=xxx.appspot.com'
      - 'NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=xxx'
      - 'NEXT_PUBLIC_FIREBASE_APP_ID=xxx'
      - 'NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=xxx'
  - name: 'gcr.io/$PROJECT_ID/firebase'
    args: ['deploy', '--only=hosting']

これでCloud BuildでFirebase Hostingのデプロイができるようになった。

次回はWebhookトリガーの設定方法についてまとめる。

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

参考


Related #firebase

SharedArrayBuffer updates in Android Chrome 88 and Desktop Chrome 92

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

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

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

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

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

Firebase FunctionsでonCallで実装しているにも関わらずCORSエラーが発生した場合

Cloud Functions(GCP)の管理画面を確認してみる

JestでFirestoreセキュリティルールのテストを書く

Github ActionsでCIを回せるようになった

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

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