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