Cloud Build 步骤失败后如何下载 Docker 图像

How to download Docker image after a failed Cloud Build step

我有一个包含以下步骤的 Cloud Build 配置:

  1. 构建 Docker 图像。
  2. 运行 对该图像进行一些测试。
  3. 将镜像推送到 Container Registry。
  4. 再做一些事情。

问题是构建在推送步骤(第 3 步)失败。
有什么方法可以下载创建的 docker 图像或更改第 3 步的命令 (args) 以便推送不会失败,这样我就可以从第 3 步重试构建?

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [
          'build',
          '--build-arg', 'base_image=${_DOCKER_BASE_IMAGE}',
          '--build-arg', 'cuda=${_CUDA}',
          '--build-arg', 'python_version=${_PYTHON_VERSION}',
          '--build-arg', 'cloud_build=true',
          '--build-arg', 'release_version=${_RELEASE_VERSION}',
          '-t', 'gcr.io/aluminiumponey/xla:${_IMAGE_NAME}',
          '-f', 'docker/Dockerfile', '.'
        ]
  timeout: 14400s
- name: 'gcr.io/cloud-builders/docker'
  entrypoint: bash
  args: ['-c', 'docker tag gcr.io/aluminiumponey/xla:${_IMAGE_NAME} gcr.io/repsmate/xla:${_IMAGE_NAME}_$(date -u +%Y%m%d)']
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/aluminiumponey/xla']
  timeout: 1800s
- name: 'gcr.io/aluminiumponey/xla:${_IMAGE_NAME}'
  entrypoint: 'bash'
  args: ['-c', 'source /pytorch/xla/docker/common.sh && collect_wheels ${_RELEASE_VERSION}']

推送失败,因为我没有权限推送到gcr.io。

Cloud Build 是一个无服务器环境,它是短暂的。在构建结束时,清理了环境。所以,不,您无法在 Cloud Build 崩溃后获取容器

但是,你可以想象在步骤 1 和步骤 2 之间添加一个新步骤(命名为 1.5)以将图像推送到 Google Container Registry (or the newest one Google Artifact Registry)

我同意@Guillaume 关于 Cloud Build 在构建时间后的行为和处理图像的方式。此外,如果由于权限原因,Container Registry 上的 Cloud Build 推送失败,那么您正在执行以下操作之一:

  • 您正在使用一个项目中的服务帐户访问另一个项目中的 Container Registry
  • 您正在使用对存储具有只读访问权限的默认服务帐户,但您希望同时拉取和推送图像
  • 您正在使用自定义服务帐户与 Container Registry 交互

如果是这种情况,请确保您用于 Cloud Build 的服务帐户对 Container Registry 所在的项目具有 Storage Admin 角色。


参考:

https://cloud.google.com/container-registry/docs/access-control#general