GitHub Actions で Cloud Functions for Firebase のCD環境を作る
Cloud Functions for Firebase(以下 Functions)で作ったアプリケーションを GitHub Actions でデプロイする方法を紹介します。
この記事の動作は以下リポジトリで確認できます。
GCP 側の設定
Functions を GitHub Actions でデプロイするには、GCP のサービスアカウントが必要です。
最初に、サービスアカウントの作成と権限付与を行います。
GCP のコンソールで対象のプロジェクトを選択した上でIAM と管理を開き、サービスアカウントを作成します。

ロールには Firebase の管理者 を設定します。

サービスアカウントの作成が完了したら、キーを作成します。


JSON タイプでダウンロードしておいてください。
リポジトリ側の設定
対象リポジトリの Settings から GitHub Actions 用の Secrets を作成します。
GCP_SA_KEY という名前で先ほどダウンロードした JSON の中身を設定します。

これで GitHub Actions で Functions をデプロイする準備が整いました。
GitHub Actions の設定ファイルの作成
リポジトリの.github/workflowsディレクトリにdeploy.ymlという名前でファイルを作成します。
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v3
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 16
cache: "npm"
cache-dependency-path: functions/package-lock.json
- name: Install dependencies
run: npm install -C functions
# ここからがデプロイのステップ
- name: Deploy to Firebase
uses: w9jds/firebase-action@master
with:
args: deploy --only functions
env:
GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
github-action-for-firebaseという Action を使ってデプロイしています。
args の部分は任意のコマンドを設定してください。この例だと、functionsのみデプロイしています。
あとは、mainブランチにプッシュすると GitHub Actions が実行され、Functions がデプロイされます 🚀

おまけ)Functions の環境変数もデプロイする場合
Functions の中で使っている環境変数もデプロイ時に設定したい場合は、CONFIG_VALUESを設定します。
まず、GitHub Actions 用の Secrets に CONFIG_VALUES という名前で作成します。

次に先ほどdeploy.ymlを修正します。最後のステップの env に、CONFIG_VALUESを追加すれば OK です。
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v3
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 16
cache: "npm"
cache-dependency-path: functions/package-lock.json
- name: Install dependencies
run: npm install -C functions
- name: Deploy to Firebase
uses: w9jds/firebase-action@master
with:
args: deploy --only functions
env:
GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
+ CONFIG_VALUES: ${{ secrets.CONFIG_VALUES }}
これで環境変数も一緒にデプロイされます。
おわりに
簡単ですが GitHub Actions で Functions をデプロイする方法でした。
今はなんでも GitHub Actions でサクッと作れて最高ですね。
Discussion