Google Cloud Build - 摘要状态显示失败,所有步骤均已成功

问题描述

我已经设置了一个 Google Cloud Build 管道,它将从 Dockerfile 构建一个 docker 镜像,测试该镜像并将该镜像推送到 Google Container Registry。

运行管道后,我注意到所有定义的步骤都以 distance 状态传递,但构建摘要本身返回 SUCCESS 状态,即使我可以看到生成到 Google Container Registry 中的映像。>

我使用以下命令构建图像

FAILURE

以下是返回的错误信息:

gcloud builds submit --config cloudbuild.yml --gcs-log-dir 'gs://<bucket>' .

如果所有步骤都标记ERROR: (gcloud.builds.submit) build www-xxxx-yyyy-zzzz completed with status "FAILURE" ? Error: The command exited with status 1 ,那么 gcloud builds submit 命令是否有任何理由以代码 1 退出

以下是从该特定构建的 SUCCESS 命令中获取的一些过滤日志数据。

gcloud builds describe

以下是 Google Cloud Build 设置:

steps:
- args:
  - build
  - -t
  - <host>/<project/<image>:<tag>
  - .
  name: gcr.io/cloud-builders/docker
  status: SUCCESS
- args:
  - test
  - --image
  - <host>/<project/<image>:<tag>
  - --config
  - test_config.yml
  - -o
  - json
  name: gcr.io/gcp-runtimes/container-structure-test
  status: SUCCESS

解决方法

我终于在 Google Cloud 支持团队的帮助下解决了这个问题。

他们发现了一个 403 Permission Denied 错误,因为 Cloud Build 容器试图访问 Google Cloud Storage 以删除存储在存储桶中的某个日志对象,此错误消息是在 Cloud Build 的后台系统中找到的,用户/客户无权访问。 403 Permission Denied 错误是应用到存储分区的对象保留策略的结果。

就我而言,我已经用生命周期策略替换了保留策略来解决这个问题,并且它奏效了。我们这样做是因为我们认为控制 Cloud Build 日志大小是我们的主要目标,为了防止对日志文件的任何意外删除/修改,我们最终设置了对日志存储桶中资源的只读访问权限,除了Cloud Build 使用的服务帐号。