是否可以在 Google Cloud Build 中动态生成标签?

Ion*_*chy 5 google-cloud-build

首先:我对云构建有点陌生。与以前使用的方法相比,我发现它是一个令人痛苦、不成熟且相当烦人的框架。无尽的时间花费在让构建者去工作,而这些构建者应该是开箱即用的(例如 helm 构建器),而它的局限性是令人惊讶和令人沮丧的。也许下面的问题就是一个很好的例子:

我想构建并推送一个 docker 镜像。根据文档,最后推送到 docker 存储库的图像(我为此使用 GCR)位于我的 cloudbuild.yaml 文件中的以下配置部分:

images:
  - 'eu.gcr.io/$PROJECT_ID/my-project:${_TAG}'
  - 'eu.gcr.io/$PROJECT_ID/my-project:latest'
Run Code Online (Sandbox Code Playgroud)

我可以使用以下部分手动设置 _TAG 替换:

substitutions:
  _TAG: x.y.z
Run Code Online (Sandbox Code Playgroud)

但这意味着我每次都必须手动修复此文件中的版本号。更糟糕的是:如果我分支,我需要一直维护版本号。在这种情况下,我有一个 python 项目,它使用 setuptools,版本自然包含在 setup.py 文件中,我可以毫无问题地解析它。尝试将数字解析到特定文件并在图像部分中使用 $(cat VERSION) 会失败,因为系统声称它无法替换 $(cat VERSION) 部分。那么,如何在另一个构建步骤中覆盖 _TAG 变量,使其在“图像”部分中显示正确呢?

llo*_*les 4

如果您使用来自 Cloud Source Repositories、GitHub 或 Bitbucket 的触发构建,您可以标记您的提交并使用$TAG_NAME 默认替换变量

 images:
      - 'eu.gcr.io/$PROJECT_ID/my-project:$TAG_NAME'
      - 'eu.gcr.io/$PROJECT_ID/my-project:latest'
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您使用 Cloud SDK 提交 Cloud Build 构建,您可以使用参数提供--substitutions

gcloud builds submit [SOURCE] --config config.yaml --substitutions _TAG=x.y.z
Run Code Online (Sandbox Code Playgroud)

另外,我相信您会发现这个使用 Cloud Build 进行 GitOps 风格的持续交付教程非常有帮助。它解释了如何使用 Cloud Build 在 Google Cloud Platform 上创建持续集成和交付 (CI/CD) 管道。