NextJs的firebase宿主构建在github操作上,不读取环境变量



我正在使用Github Actions在Firebase主机上部署NextJs应用程序。

我有以下工作流程文件:

name: Deploy to Firebase Hosting on merge
on:
push:
branches:
- main
jobs:
build-and-deploy-hosting:
runs-on: ubuntu-latest
defaults:
run:
working-directory: hosting
steps:
- name: Check out latest version of the code
uses: actions/checkout@v2
- name: Install Node.js and NPM
uses: actions/setup-node@v2
with:
node-version: "14"
- name: Make envfile
uses: SpicyPizza/create-envfile@v1
with:
envkey_NEXT_PUBLIC_FIREBASE_API_KEY: '${{ secrets.NEXT_PUBLIC_FIREBASE_API_KEY }}'
envkey_NEXT_PUBLIC_FIREBASE_PROJECT_ID: '${{ secrets.NEXT_PUBLIC_FIREBASE_PROJECT_ID }}'
envkey_NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN: '${{ secrets.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN }}'
envkey_NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET: '${{ secrets.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET }}'
envkey_NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID: '${{ secrets.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID }}'
envkey_NEXT_PUBLIC_DEVELOPMENT: false
file_name: .env.local
directory: ./
- run: npm ci
- run: npm run build
- run: npm run export
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: '${{ secrets.GITHUB_TOKEN }}'
firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNTxxx }}'
channelId: live
projectId: xxxx
env:
FIREBASE_CLI_PREVIEWS: hostingchannels

通常,NextJs会查找一个包含环境变量的.env.local文件。因此,我将这些作为机密添加到Github repo中,然后通过创建.env.loal文件在构建文件中引用它们。

但它从未被识别,因为当Action运行时,我会得到以下错误:

> Build error occurred
[Error: Your API key is invalid, please check you have copied it correctly.] ***
type: 't',
code: 'auth/invalid-api-key',
a: null
***
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! xxx@0.1.0 build: `next build`
npm ERR! Exit status 1
npm ERR! 

我使用了GitHub文档中引用的ENV上下文,这似乎更简单。

这个Stack Overflow的答案解决了我的最后一个问题,ENV上下文需要添加到作业之上的顶层。

例如:

name: Deploy to Firebase Hosting on merge
'on':
push:
branches:
- main
env:
NEXT_PUBLIC_FIREBASE_PUBLIC_API_KEY: ${{secrets.NEXT_PUBLIC_FIREBASE_PUBLIC_API_KEY}}
jobs:
build_and_deploy:
runs-on: ubuntu-latest

很确定这是通过在胡子模板(${{ secrets.SOME_NAME }}位(周围使用引号触发的,这会导致它们被逐字解释,而不是被替换。

name: Deploy to Firebase Hosting on merge
on:
push:
branches:
- main
jobs:
build-and-deploy-hosting:
runs-on: ubuntu-latest
defaults:
run:
working-directory: hosting
steps:
- name: Check out latest version of the code
uses: actions/checkout@v2
- name: Install Node.js and NPM
uses: actions/setup-node@v2
with:
node-version: "14"
- name: Make envfile
uses: SpicyPizza/create-envfile@v1
with:
envkey_NEXT_PUBLIC_FIREBASE_API_KEY: ${{ secrets.NEXT_PUBLIC_FIREBASE_API_KEY }}
envkey_NEXT_PUBLIC_FIREBASE_PROJECT_ID: ${{ secrets.NEXT_PUBLIC_FIREBASE_PROJECT_ID }}
envkey_NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN: ${{ secrets.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN }}
envkey_NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET: ${{ secrets.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET }}
envkey_NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID: ${{ secrets.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID }}
envkey_NEXT_PUBLIC_DEVELOPMENT: false
file_name: .env.local
directory: ./
- run: npm ci
- run: npm run build
- run: npm run export
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: ${{ secrets.GITHUB_TOKEN }}
firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNTxxx }}
channelId: live
projectId: xxxx
env:
FIREBASE_CLI_PREVIEWS: hostingchannels

最新更新