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
相关产品推荐
相关产品推荐

