NextJs firebase 托管基于 github 操作构建,不读取环境变量

时间:2021-04-22 16:08:23

标签: firebase github next.js github-actions firebase-hosting

我正在使用 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! 

1 个答案:

答案 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