🚚

GitHub Actions で Cloud Functions for Firebase のCD環境を作る

2023/03/01に公開

Cloud Functions for Firebase(以下 Functions)で作ったアプリケーションを GitHub Actions でデプロイする方法を紹介します。

この記事の動作は以下リポジトリで確認できます。

https://github.com/kawamataryo/firebase-cd-sample

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 を使ってデプロイしています。

https://github.com/w9jds/firebase-action

args の部分は任意のコマンドを設定してください。この例だと、functionsのみデプロイしています。

あとは、mainブランチにプッシュすると GitHub Actions が実行され、Functions がデプロイされます 🚀

おまけ)Functions の環境変数もデプロイする場合

Functions の中で使っている環境変数もデプロイ時に設定したい場合は、CONFIG_VALUESを設定します。

まず、GitHub Actions 用の Secrets に CONFIG_VALUES という名前で作成します。

次に先ほどdeploy.ymlを修正します。最後のステップの env に、CONFIG_VALUESを追加すれば OK です。

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 }}
+          CONFIG_VALUES: ${{ secrets.CONFIG_VALUES }}

これで環境変数も一緒にデプロイされます。

おわりに

簡単ですが GitHub Actions で Functions をデプロイする方法でした。
今はなんでも GitHub Actions でサクッと作れて最高ですね。

Discussion