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

如何在GitHub Actions中通过GitHub Secret配置Firebase Functions服务账号?

解决方案

方案一:继续使用 applicationDefault()(推荐)

GitHub Actions 环境中没有默认的应用凭据,我们可以通过将 GitHub Secret 中的服务账号 JSON 写入临时文件,再指定 GOOGLE_APPLICATION_CREDENTIALS 环境变量来适配 applicationDefault() 的读取逻辑:

  1. 在 GitHub 仓库配置 Secret
    进入仓库的「Settings」→「Secrets and variables」→「Actions」,新建一个名为 FIREBASE_SERVICE_ACCOUNT 的 Secret,将完整的服务账号 JSON 内容粘贴进去。

  2. 修改 GitHub Actions 工作流文件
    在部署步骤前添加以下操作,生成临时服务账号文件并设置环境变量:

    - name: Create temporary service account file
      run: |
        # 创建存放服务账号的目录(和本地路径保持一致)
        mkdir -p .service-accounts
        # 将 Secret 内容写入临时 JSON 文件
        echo "${{ secrets.FIREBASE_SERVICE_ACCOUNT }}" > .service-accounts/development.json
        # 设置环境变量指向该文件
        echo "GOOGLE_APPLICATION_CREDENTIALS=.service-accounts/development.json" >> $GITHUB_ENV
    

    这样你的原有初始化代码无需修改,applicationDefault() 会自动读取临时文件中的凭据。

方案二:直接用服务账号对象初始化 cert()

如果不想生成临时文件,可以直接将 Secret 中的 JSON 字符串解析为对象,传入 admin.credential.cert():

  1. 配置 GitHub Secret
    和方案一相同,将服务账号 JSON 存入 FIREBASE_SERVICE_ACCOUNT Secret。

  2. 修改 Firebase Admin 初始化代码

    import * as admin from 'firebase-admin';
    // 避免重复初始化
    if (!admin.apps.length) {
      // 从环境变量读取服务账号 JSON 并解析
      const serviceAccount = JSON.parse(process.env.FIREBASE_SERVICE_ACCOUNT || '{}');
      admin.initializeApp({
        credential: admin.credential.cert(serviceAccount)
      });
    }
    
    export default admin;
    
  3. 在工作流中注入环境变量
    在部署步骤前添加:

    - name: Inject service account env var
      run: echo "FIREBASE_SERVICE_ACCOUNT=${{ secrets.FIREBASE_SERVICE_ACCOUNT }}" >> $GITHUB_ENV
    

本地开发时,你可以继续使用 .env 文件,通过 dotenv 加载 GOOGLE_APPLICATION_CREDENTIALS 或直接设置 FIREBASE_SERVICE_ACCOUNT 环境变量,不影响原有开发流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:02:40