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
解決した方法
- github secrets に.env ファイルの内容を登録する
- 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