You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions中Firebase CLI认证失败问题求助

解决Firebase部署的Github Actions认证失败问题

我为Next项目编写了Github Actions工作流,目标是通过服务账号密钥构建并部署至Firebase,但部署时出现认证失败错误,已确认服务账号密钥已存入secrets.FIREBASE_SERVICE_ACCOUNT。

原工作流代码

name: Build and Deploy
on:
  push:
    branches:
      - main
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout 🛎️
        uses: actions/checkout@master
        with:
          persist-credentials: false

      - name: Setup Node.js environment 🗳️
        uses: actions/setup-node@master
        with:
          node-version: "16"

      - name: Create SA key
        run: echo '${{ secrets.FIREBASE_SERVICE_ACCOUNT }}' > $GITHUB_WORKSPACE/gcloud.json

      - name: Set SA Key
        run: |
          export GOOGLE_APPLICATION_CREDENTIALS=$GITHUB_WORKSPACE/gcloud.json

      - name: Install Dependencies and Build
        run: |
          npm i
          ./node_modules/.bin/nuxt build

      - name: Deploy
        env:
          GOOGLE_APPLICATION_CREDENTIALS: ${{ env.GITHUB_WORKSPACE }}/gcloud.json
        run: |
          node predeploy.mjs
          ./node_modules/.bin/firebase deploy --only hosting,functions:server --json --project website-****-*****

报错信息

{
  "status": "error",
  "error": "Failed to authenticate, have you run \u001b[1mfirebase login\u001b[22m?"
}

问题原因及解决步骤

Firebase CLI 默认不会读取GOOGLE_APPLICATION_CREDENTIALS环境变量完成认证,需要显式指定服务账号密钥文件,或使用官方 Action 简化流程。

方案一:修改Deploy步骤,指定服务账号密钥文件

在Deploy步骤的firebase deploy命令中添加--service-account参数,直接指向生成的密钥文件:

- name: Deploy
  run: |
    node predeploy.mjs
    ./node_modules/.bin/firebase deploy --only hosting,functions:server --json --project website-****-***** --service-account $GITHUB_WORKSPACE/gcloud.json

方案二:使用Firebase官方Github Action(推荐)

使用firebase/firebase-action官方 Action 自动处理认证,无需手动创建密钥文件和设置环境变量:

name: Build and Deploy
on:
  push:
    branches:
      - main
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '16'
          cache: 'npm' # 缓存npm依赖,加快构建速度

      - name: Install dependencies & build
        run: |
          npm ci # 使用npm ci替代npm i,CI环境下依赖安装更稳定
          npx nuxt build

      - name: Deploy to Firebase
        uses: firebase/firebase-action@v1
        with:
          args: deploy --only hosting,functions:server --project website-****-*****
        env:
          SERVICE_ACCOUNT_KEY: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }}

额外优化建议

  • 避免使用@master版本的Action,改用指定版本(如@v4),提升工作流稳定性
  • 使用npm ci替代npm i,基于package-lock.json安装依赖,确保CI环境与本地依赖一致
  • 启用npm缓存,减少重复安装依赖的时间
  • 简化命令写法,用npx nuxt build替代./node_modules/.bin/nuxt build

内容的提问来源于stack exchange,提问作者Jacob Miller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:55:35