github actionsでfirebaseにdeployすると環境変数が読み込まれない

環境

  • firebase functions: v2
  • next.js: 13.0.2

事象

github actions で firebase に deploy すると環境変数が読み込まれない。 具体的には問い合わせフォームに sendgrid の API キーを使っているが、firebase に deploy すると API キーが読み込まれず、問い合わせフォームが使えなかった。 手動で deploy すると問題なく API キーが読み込まれていた。

改修前の yml ファイル

name: Deploy to Firebase Hosting on merge

'on':
  push:
    branches:
      - main

jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '18'

      - name: Install dependencies and build
        run: npm ci && npm run build

      - name: Deploy to Firebase Hosting
        uses: FirebaseExtended/action-hosting-deploy@v0
        with:
          repoToken: '${{ secrets.GITHUB_TOKEN }}'
          firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_SYNROCK_TECH_BLOG }}'
          channelId: live
          projectId: synrock-tech-blog
        env:
          FIREBASE_CLI_EXPERIMENTS: webframeworks

解決した方法

  1. github secrets に.env ファイルの内容を登録する
  2. github actions で.env ファイルを作成する処理を追加する

1. github secrets に.env ファイルの内容を登録する

リポジトリの settings から secrets and variables の Actions を選択し、新しい secret を追加する。

2. github actions で.env ファイルを作成する処理を追加する

.env ファイルを作成し、そこに環境変数を書き込む処理を追加する。

- name: Create .env file
  run: |
    echo SENDGRID_API_KEY=${{ secrets.SENDGRID_API_KEY }} > .env

.env ファイルを削除する処理を最後に追加する。

- name: Clean up .env file
  run: rm .env

改修後の yml ファイル

改修後の yml ファイルの全体は以下の通り。

# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools

name: Deploy to Firebase Hosting on merge

'on':
  push:
    branches:
      - main

jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '18'

      - name: Install dependencies and build
        run: npm ci && npm run build

      - name: Create .env file
        run: |
          echo SENDGRID_API_KEY=${{ secrets.SENDGRID_API_KEY }} > .env

      - name: Deploy to Firebase Hosting
        uses: FirebaseExtended/action-hosting-deploy@v0
        with:
          repoToken: '${{ secrets.GITHUB_TOKEN }}'
          firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_SYNROCK_TECH_BLOG }}'
          channelId: live
          projectId: synrock-tech-blog
        env:
          FIREBASE_CLI_EXPERIMENTS: webframeworks

      - name: Clean up .env file
        run: rm .env