如何使用 Cloudbuild 将具有不同标签的 Docker 镜像与配置文件一起存储在 Container Registry 中?

Posted

技术标签:

【中文标题】如何使用 Cloudbuild 将具有不同标签的 Docker 镜像与配置文件一起存储在 Container Registry 中?【英文标题】:How to store docker images in Container Registry with different tags with a config file using Cloudbuild? 【发布时间】:2021-08-17 18:17:41 【问题描述】:

我想在 Google Container Registry 中存储带有两个不同标签 $BRANCH_NAME-$REVISION_IDlatest 的图像

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/myapp:$BRANCH_NAME-$REVISION_ID', '.']
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/$PROJECT_ID/myapp:$BRANCH_NAME-$REVISION_ID']
images: ['gcr.io/$PROJECT_ID/myapp:$BRANCH_NAME-$REVISION_ID']

我可以用一个标签保存它,但是当我尝试添加第二个标签时它失败了。我收到以下错误

Finished Step #1
Starting Step #2
Step #2: Already have image (with digest): gcr.io/cloud-builders/docker
Step #2: The push refers to repository [gcr.io/myproject/myapp]
Step #2: tag does not exist: gcr.io/myproject/myapp:latest

我想这样做以确保我的 k8s 部署文件指向最新的图像。


更新

我做到了

substitutions:
  _IMG_NAME: "myapp"

steps:

- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/$_IMG_NAME:$BRANCH_NAME-$REVISION_ID', '-t' , 'gcr.io/$PROJECT_ID/$_IMG_NAME:latest', '.']
images: ['gcr.io/$PROJECT_ID/$_IMG_NAME']

【问题讨论】:

【参考方案1】:

我认为在创建 docker 映像时可以使用/设置一些标签。 例如,可以使用类似的东西:

- name: 'gcr.io/cloud-builders/docker'
  env:
    - 'DOCKER_BUILDKIT=1'
  args:
    - build
    - --tag
    - gcr.io/$PROJECT_ID/myapp:$BRANCH_NAME-$REVISION_ID'
    - --tag
    - gcr.io/$PROJECT_ID/myapp:latest
    - .

我也猜想docker pushimage 中的一个应该就足够了。

【讨论】:

感谢您的回答我能够做到,我会用答案更新问题。就像你写的那样,有图像就足够了。

以上是关于如何使用 Cloudbuild 将具有不同标签的 Docker 镜像与配置文件一起存储在 Container Registry 中?的主要内容,如果未能解决你的问题,请参考以下文章

在 GCP cloudbuild.yaml 中指定与“名称”不同的“执行函数”

如何使用 cloudbuild 将秘密管理器秘密传递给 app.yaml 中的应用引擎环境变量

如何在 cloudbuild.yaml 中使用 Kaniko?

cloudbuild.yaml 包含不同的云构建器配置

如何通过 gcloud cli args 或环境变量将 secretEnv 指定给 cloudbuild.yaml

如何动态地将许多具有不同名称的标签添加到滚动视图中