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

Firebase项目选择无效:GitHub Actions部署Cloud Functions失败排查

解决GitHub Actions部署Firebase Cloud Functions时的项目访问权限问题

问题背景

我在项目中使用Firebase Cloud Functions,希望在GitHub的develop分支推送代码时自动部署函数。配置GitHub Actions Workflow后,Debug步骤显示服务账号能成功访问目标项目,但部署时却报错:

Error: Failed to get Firebase project ***. Please make sure the project exists and your account has permission to access it.

当前Workflow配置如下:

name: Dev deploy

on:
  workflow_dispatch:
  push:
    branches:
      - develop

jobs:
  deploy_functions:
    name: Deploy Functions
    runs-on: ubuntu-latest
    steps:
      - name: Check out repo
        uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Cache npm
        uses: actions/cache@v1
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-16-${{ hashFiles('**/package-lock.json') }}

      - name: Node install
        run: |
          cd functions
          npm install
          npm ci

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

      - name: Create .firebaserc
        run: ./.github/actions-scripts/build-firebaserc.sh > .firebaserc
        env:
          PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID_DEV }}

      - name: Debug
        run: |
          cat .firebaserc
          npx firebase-tools projects:list
        env:
          GOOGLE_APPLICATION_CREDENTIALS: gcloud.json

      - name: Deploy Cloud Functions
        run: npx firebase-tools deploy --only functions
        env:
          GOOGLE_APPLICATION_CREDENTIALS: gcloud.json

Debug步骤已确认服务账号能列出目标项目,但部署失败,无法执行firebase login:reauth,手动指定项目ID也触发相同错误。

解决方案

1. 给服务账号添加Firebase专属权限

虽然gcloud命令能访问项目,但Firebase CLI需要Firebase特定权限,而非仅GCP项目权限:

  • 打开Google Cloud控制台的IAM页面,找到对应的服务账号
  • 添加以下角色中的至少一种:
    • Firebase Admin SDK Administrator Service Agent(roles/firebase.admin):拥有完整Firebase管理权限
    • 或组合权限:Cloud Functions Developer(roles/cloudfunctions.developer) + Firebase Deployer(roles/firebase.deployer):满足函数部署的最小权限要求

2. 部署命令直接指定项目ID

跳过.firebaserc的依赖,在deploy命令中显式指定项目,避免配置文件格式或读取问题:

- name: Deploy Cloud Functions
  run: npx firebase-tools deploy --only functions --project ${{ secrets.FIREBASE_PROJECT_ID_DEV }}
  env:
    GOOGLE_APPLICATION_CREDENTIALS: gcloud.json

3. 校验.firebaserc的生成格式

确保build-firebaserc.sh生成的文件是合法JSON,正确结构应为:

{
  "projects": {
    "default": "your-project-id-dev"
  }
}

通过Debug步骤的cat .firebaserc输出确认,若存在引号转义错误或格式问题,需修正脚本逻辑。

4. 优化依赖安装步骤

当前Node install步骤中npm install + npm ci的组合会导致重复操作,npm ci会完全重置node_modules,建议只保留npm ci:

- name: Node install
  run: |
    cd functions
    npm ci

5. 改用官方Firebase GitHub Action

使用Firebase官方维护的Action,减少环境配置问题:

- name: Deploy Cloud Functions
  uses: firebase/firebase-tools@v13
  with:
    args: deploy --only functions --project ${{ secrets.FIREBASE_PROJECT_ID_DEV }}
  env:
    GOOGLE_APPLICATION_CREDENTIALS: ${{ github.workspace }}/gcloud.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:23:19