Google Cloud Build - 摘要状态显示失败,所有步骤均已成功
Google Cloud Build - Summary status shows FAILURE, all steps succeded
我已经设置了一个 Google Cloud Build 管道,它将从 Dockerfile 构建一个 docker 图像,测试图像并将图像推送到 Google Container Registry。
在 运行 管道上,我注意到所有定义的步骤都以 SUCCESS
状态通过,但构建摘要本身以 FAILURE
状态返回,即使我可以看到正在生成的图像Google 容器注册表。
我使用以下命令构建图像
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
如果所有步骤都标记为 SUCCESS
,gcloud builds submit
命令是否有任何原因以代码 1
退出?
下面是针对该特定构建从 gcloud builds describe
命令中获取的一些过滤日志数据。
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 Build 设置:
# cloudbuild.yml
steps:
# Build the image
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', '<host>/<project/<image>:<tag>', '.' ]
# Test the image
- name: 'gcr.io/gcp-runtimes/container-structure-test'
args: [
'test',
'--image',
'<host>/<project/<image>:<tag>',
'--config',
'test_config.yml',
'-o',
'json'
]
# Push the image
images: [ '<host>/<project/<image>:<tag>' ]
在 Google 云支持团队的帮助下,我终于解决了这个问题。
他们发现 403 Permission Denied
错误,因为 Cloud Build 容器试图访问 Google Cloud Storage 以删除存储在存储桶中的某个日志对象,此错误消息在后台系统中找到users/clients 无权访问的 Cloud Build。 403 Permission Denied
错误是对象保留策略应用于存储桶的结果。
就我而言,我已将保留政策替换为生命周期政策来解决此问题并且它奏效了。我们这样做是因为我们认为控制 Cloud Build 日志大小是我们的主要 objective,并且为了防止对日志文件的任何意外 deletion/modification,我们最终设置了对资源的只读访问权限Cloud Build 使用的服务帐户除外的日志存储桶。
我已经设置了一个 Google Cloud Build 管道,它将从 Dockerfile 构建一个 docker 图像,测试图像并将图像推送到 Google Container Registry。
在 运行 管道上,我注意到所有定义的步骤都以 SUCCESS
状态通过,但构建摘要本身以 FAILURE
状态返回,即使我可以看到正在生成的图像Google 容器注册表。
我使用以下命令构建图像
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
如果所有步骤都标记为 SUCCESS
,gcloud builds submit
命令是否有任何原因以代码 1
退出?
下面是针对该特定构建从 gcloud builds describe
命令中获取的一些过滤日志数据。
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 Build 设置:
# cloudbuild.yml
steps:
# Build the image
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', '<host>/<project/<image>:<tag>', '.' ]
# Test the image
- name: 'gcr.io/gcp-runtimes/container-structure-test'
args: [
'test',
'--image',
'<host>/<project/<image>:<tag>',
'--config',
'test_config.yml',
'-o',
'json'
]
# Push the image
images: [ '<host>/<project/<image>:<tag>' ]
在 Google 云支持团队的帮助下,我终于解决了这个问题。
他们发现 403 Permission Denied
错误,因为 Cloud Build 容器试图访问 Google Cloud Storage 以删除存储在存储桶中的某个日志对象,此错误消息在后台系统中找到users/clients 无权访问的 Cloud Build。 403 Permission Denied
错误是对象保留策略应用于存储桶的结果。
就我而言,我已将保留政策替换为生命周期政策来解决此问题并且它奏效了。我们这样做是因为我们认为控制 Cloud Build 日志大小是我们的主要 objective,并且为了防止对日志文件的任何意外 deletion/modification,我们最终设置了对资源的只读访问权限Cloud Build 使用的服务帐户除外的日志存储桶。