从 GitLab CI 将应用程序部署到 App Engine 时权限被拒绝

eli*_*0tt 4 python google-app-engine google-cloud-platform gitlab-ci

我在使用 GitLab CI 将 Python 3 应用程序自动部署到 App Engine 标准时遇到了问题。

出现以下错误:

DEBUG: (gcloud.app.deploy) Error Response: [7] Failed to create cloud build: Permission denied
 Traceback (most recent call last):
   File "/google-cloud-sdk/lib/googlecloudsdk/calliope/cli.py", line 984, in Execute
     resources = calliope_command.Run(cli=self, args=args)
   File "/google-cloud-sdk/lib/googlecloudsdk/calliope/backend.py", line 807, in Run
     resources = command_instance.Run(args)
   File "/google-cloud-sdk/lib/surface/app/deploy.py", line 110, in Run
     default_strategy=flex_image_build_option_default))
   File "/google-cloud-sdk/lib/googlecloudsdk/command_lib/app/deploy_util.py", line 642, in RunDeploy
     ignore_file=args.ignore_file)
   File "/google-cloud-sdk/lib/googlecloudsdk/command_lib/app/deploy_util.py", line 432, in Deploy
     extra_config_settings)
   File "/google-cloud-sdk/lib/googlecloudsdk/api_lib/app/appengine_api_client.py", line 208, in DeployService
     poller=done_poller)
   File "/google-cloud-sdk/lib/googlecloudsdk/api_lib/app/operations_util.py", line 314, in WaitForOperation
     sleep_ms=retry_interval)
   File "/google-cloud-sdk/lib/googlecloudsdk/api_lib/util/waiter.py", line 264, in WaitFor
     sleep_ms, _StatusUpdate)
   File "/google-cloud-sdk/lib/googlecloudsdk/api_lib/util/waiter.py", line 326, in PollUntilDone
     sleep_ms=sleep_ms)
   File "/google-cloud-sdk/lib/googlecloudsdk/core/util/retry.py", line 229, in RetryOnResult
     if not should_retry(result, state):
   File "/google-cloud-sdk/lib/googlecloudsdk/api_lib/util/waiter.py", line 320, in _IsNotDone
     return not poller.IsDone(operation)
   File "/google-cloud-sdk/lib/googlecloudsdk/api_lib/app/operations_util.py", line 183, in IsDone
     encoding.MessageToPyValue(operation.error)))
 OperationError: Error Response: [7] Failed to create cloud build: Permission denied
 ERROR: (gcloud.app.deploy) Error Response: [7] Failed to create cloud build: Permission denied
Run Code Online (Sandbox Code Playgroud)

.gitlab-ci.yml

image: google/cloud-sdk:alpine

stages:
  - Deploy

deploy:
  stage: Deploy
  only:
  - tags
  script:
  - echo $SERVICE_ACCOUNT > /tmp/$CI_PIPELINE_ID.json
  - gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
  - gcloud app deploy app.yaml --project $PROJECT_ID --verbosity=debug

after_script:
- rm /tmp/$CI_PIPELINE_ID.json

Run Code Online (Sandbox Code Playgroud)

应用程序.yaml

service: api
runtime: python37
Run Code Online (Sandbox Code Playgroud)

我启用了 App Engine Admin API 并为 GitLab CI 创建了一个具有以下角色的服务帐户:

  • 应用引擎部署者
  • App Engine 服务管理员
  • 存储对象创建者
  • 存储对象查看器

GitLab CI 变量 $PROJECT_ID 和 $SERVICE_ACCOUNT 已经分别填充了 GCP 项目 id 和服务账户的 key。

eli*_*0tt 24

自己修好了:

我需要启用 Cloud Build API 并将 Cloud Build 服务帐户角色授予我的服务帐户。

  • 这似乎是最近对所需角色/权限集的更改。我们有一个工具部署到 App Engine,并带有一个服务帐户,直到今天我需要添加此角色时,该工具仍然有效。 (2认同)