Cloud Build 步骤失败后如何下载 Docker 图像
How to download Docker image after a failed Cloud Build step
我有一个包含以下步骤的 Cloud Build 配置:
- 构建 Docker 图像。
- 运行 对该图像进行一些测试。
- 将镜像推送到 Container Registry。
- 再做一些事情。
问题是构建在推送步骤(第 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
我有一个包含以下步骤的 Cloud Build 配置:
- 构建 Docker 图像。
- 运行 对该图像进行一些测试。
- 将镜像推送到 Container Registry。
- 再做一些事情。
问题是构建在推送步骤(第 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