【问题标题】:Is it possible to generate tags dynamically in Google Cloud Build?是否可以在 Google Cloud Build 中动态生成标签?
【发布时间】:2020-07-02 13:43:11
【问题描述】:

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

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

images:
  - 'eu.gcr.io/$PROJECT_ID/my-project:${_TAG}'
  - 'eu.gcr.io/$PROJECT_ID/my-project:latest'

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

substitutions:
  _TAG: x.y.z

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

【问题讨论】:

    标签: google-cloud-build


    【解决方案1】:

    如果您使用来自 Cloud Source Repositories、GitHub 或 Bitbucket 的触发构建,您可以标记您的提交并使用 $TAG_NAME default substitution variable

     images:
          - 'eu.gcr.io/$PROJECT_ID/my-project:$TAG_NAME'
          - 'eu.gcr.io/$PROJECT_ID/my-project:latest'
    

    另一方面,如果您使用 Cloud SDK 提交 Cloud Build 构建,则可以使用 --substitutions argument 提供值:

    gcloud builds submit [SOURCE] --config config.yaml --substitutions _TAG=x.y.z
    

    我相信你会发现这个GitOps-style continuous delivery with Cloud Build tutorial 很有帮助。它解释了如何使用 Cloud Build 在 Google Cloud Platform 上创建持续集成和交付 (CI/CD) 管道。

    【讨论】:

    • 感谢您的指点。但是,在询问之前,我已经阅读了该材料。我的问题略有不同:我会在第一步中为 _TAG 生成替换值,完全自动化(无需从命令行触发或必须推送标签)。我想从我的存储库中的一个文件中填充该值,我保留版本号。
    • 除了default substitution variables,不能在cloudbuild.yaml配置文件中使用构建运行时已知的值。
    • 这个答案,@llompalles,在我尝试获取秘密以用于动态日志存储桶名称的一两个小时后,对我产生了影响。谢谢!就我而言,使用替换是一个合理的折衷方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2022-01-03
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2010-11-14
    相关资源
    最近更新 更多