我正在使用 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 存储库中,然后通过创建 .env.local 文件在构建文件中引用它们。
但它从未被识别,因为当 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!
答案 0 :(得分:0)
很确定这是通过在胡子模板(${{ 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