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

在GitHub Actions CI/CD流水线配置GOOGLE_APPLICATION_CREDENTIALS部署Firebase函数失败求助

问题

通过GitHub Actions工作流部署Firebase Functions,无法使用firebase login,已将Google服务账号凭据JSON内容存入GitHub Actions密钥SERVICE_ACCOUNT_STAGING,编写了如下工作流代码:

name: Deploy to Firebase Hosting project XXX when pushed on other branches than main (for example, staging)

on:
  push:

env:
  SERVICE_ACCOUNT_STAGING: ${{secrets.SERVICE_ACCOUNT_STAGING}}

jobs:
  deploy_cloud_functions_staging:
    name: deploy cloud functions to staging
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./functions
    if: github.ref != 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: 'npm'
      - run: npm ci --ignore-scripts
      - run: npm run build

      - name: Write secrets to JSON file
        run: |
          echo "${{ secrets.SERVICE_ACCOUNT_STAGING }}" > credentials.json

      - name: Install firebase
        run: npm i -g firebase-tools@latest

      - name: deploy function
        env:
          PROJECT_ID: "XXX"
        run: |
          echo "Current Directory Location: $(pwd)"
          echo "List of Files:"
          ls -1
          cat credentials.json
          export GOOGLE_APPLICATION_CREDENTIALS="/home/runner/work/XXX/XXX/functions/credentials.json"
          echo "GOOGLE_APPLICATION_CREDENTIALS=$GOOGLE_APPLICATION_CREDENTIALS"

          firebase use xxx-station-staging 
          firebase deploy --only functions --non-interactive --debug

但流水线执行失败,提示需运行firebase login,说明firebase-tools未识别到服务账号凭据。已尝试将凭据以字符串和Base64格式存储,期望firebase-tools自动读取GOOGLE_APPLICATION_CREDENTIALS变量,需排查问题原因。

排查与解决步骤
  • 检查凭据文件完整性
    原命令echo "${{ secrets.SERVICE_ACCOUNT_STAGING }}" > credentials.json可能因JSON含特殊字符(如换行、嵌套引号)导致文件损坏。改用printf避免转义问题:

    printf "%s" "${{ secrets.SERVICE_ACCOUNT_STAGING }}" > credentials.json
    

    保留cat credentials.json步骤,确认输出的JSON格式完整,无缺失括号、引号等语法错误。

  • 修正GOOGLE_APPLICATION_CREDENTIALS路径
    不要硬编码绝对路径,改用相对路径或动态获取当前目录,避免仓库路径变化导致错误:

    export GOOGLE_APPLICATION_CREDENTIALS="$(pwd)/credentials.json"
    

    新增ls -l $GOOGLE_APPLICATION_CREDENTIALS命令,确认文件存在且拥有读取权限。

  • 显式执行服务账号认证
    firebase-tools自动读取环境变量的逻辑可能存在兼容性问题,建议显式用服务账号完成认证:

    # 先安装gcloud工具(若工作流未包含)
    - name: Install gcloud SDK
      run: sudo apt-get install google-cloud-cli
    
    # 在deploy步骤中添加认证
    firebase login:ci --non-interactive --key-file=$GOOGLE_APPLICATION_CREDENTIALS
    

    认证完成后再执行firebase use和firebase deploy。

  • 验证服务账号权限
    确保服务账号已关联目标Firebase项目,并拥有Cloud Functions Developer、Firebase Admin SDK Administrator Service Agent等必要权限。可在Google Cloud控制台IAM页面检查权限配置。

  • 简化项目指定逻辑
    跳过firebase use步骤,直接在部署命令中指定项目ID,避免项目切换错误:

    firebase deploy --only functions --non-interactive --debug --project $PROJECT_ID
    
  • 尝试降级firebase-tools版本
    最新版工具可能存在兼容性问题,指定稳定版本安装:

    npm i -g firebase-tools@12.9.1
    

内容的提问来源于stack exchange,提问作者A B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:11:00