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):满足函数部署的最小权限要求
- Firebase Admin SDK Administrator Service Agent(
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
相关产品推荐
相关产品推荐

