从Github Actions部署至GAE时Cloud Build存储桶权限异常排查
问题描述
通过Github Actions部署全新应用到Google App Engine(GAE)时,触发如下错误:Failed to create cloud build: invalid bucket "<PROJECT_NUMBER>.cloudbuild-logs.googleusercontent.com"; default Cloud Build service account or user-specified service account does not have access to the bucket
已尝试两种修复操作但问题依旧:
- 用
--bucket gs://generic-app指定默认以外的日志存储桶 - 使用拥有Owner角色的自定义服务账号(已导出密钥并传入
credentials_json参数)
完整Workflow配置文件如下:
name: Deploy to Goggle App Engine on: push: branches: - main - staging jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Setup Node.js and yarn uses: 'actions/setup-node@v2' with: node-version: '18' - name: Install dependencies run: yarn - name: Build Node Project run: yarn build # Production - name: Google Cloud Auth Production if: github.event_name == 'push' && github.ref == 'refs/heads/main' uses: 'google-github-actions/auth@v2' with: credentials_json: '${{ secrets.GCP_SA_KEY_PRODUCTION }}' project_id: ${{ secrets.GCP_PROJECT_ID_PRODUCTION }} # Staging - name: Google Cloud Auth Staging if: github.event_name == 'push' && github.ref == 'refs/heads/staging' uses: 'google-github-actions/auth@v2' with: credentials_json: '${{ secrets.GCP_SA_KEY_STAGING }}' project_id: ${{ secrets.GCP_PROJECT_ID_STAGING }} - name: Set up Cloud SDK uses: 'google-github-actions/setup-gcloud@v2' - name: Deploy to Google App Engine run: | gcloud app deploy app.yaml --quiet --version service-default --no-promote --bucket gs://generic-app
问题原因与解决方案
核心原因
- Cloud Build API未启用:全新GAE项目默认不会开启Cloud Build API,而
gcloud app deploy部署时会调用该API构建镜像(即便本地已完成构建),API未开启会导致权限验证环节异常,进而抛出存储桶访问错误。 - Workflow步骤顺序错误:
setup-gcloud步骤在auth步骤之前执行,导致Cloud SDK初始化时未继承已认证的服务账号身份,后续部署使用的是未授权的默认身份。 - 自定义存储桶权限不足:指定的
gs://generic-app存储桶未对服务账号开放必要的读写权限。
修复步骤
启用Cloud Build API
登录GCP控制台,进入对应项目,搜索「Cloud Build API」,点击启用按钮。调整Workflow步骤顺序
将Set up Cloud SDK步骤移至两个Auth步骤之后,确保Cloud SDK使用已认证的服务账号:# 保留原Auth步骤 # Production Auth... # Staging Auth... - name: Set up Cloud SDK uses: 'google-github-actions/setup-gcloud@v2' # 部署步骤紧随其后配置自定义存储桶权限
- 打开GCP控制台的存储桶页面,找到
gs://generic-app - 进入「权限」标签页,点击「添加权限」
- 输入自定义服务账号邮箱,授予
Storage Object Admin角色(或拆分授予Storage Object Creator+Storage Object Viewer) - 保存配置
- 打开GCP控制台的存储桶页面,找到
验证服务账号角色
确认自定义服务账号已拥有以下必要角色:App Engine DeployerCloud Build EditorStorage Object Admin(针对日志存储桶)
内容的提问来源于stack exchange,提问作者JayCodist
相关产品推荐
相关产品推荐

