在 gitlab 管道中使用 semver 或时间戳

Posted

技术标签:

【中文标题】在 gitlab 管道中使用 semver 或时间戳【英文标题】:Use semver or a timestamp in gitlab piplelines 【发布时间】:2018-03-30 08:47:16 【问题描述】:

我正在使用 GitLab 管道,并在 .gitlab-ci.yml 文件中定义了我的构建定义。

我正在使用它来构建 docker 容器。

简单的问题。有没有办法可以使用来自 gitlab 的 semver 或时间戳标记我的 docker 容器。

内置变量似乎没有给我太多的工作。

在 Windows 上,我之前可以在 powershell 中使用GitVersion,它获取 semver 标签并将其放入一个变量中,您可以在其余的构建过程中使用。

如果我不能这样做,是否可以从操作系统获取时间戳并在 yml 文件中使用它?

【问题讨论】:

【参考方案1】:

您可以像这样在.gitlab-ci.yml 中使用时间戳(取自我们自己创建<year>.<month> 标签和发布的用法:

job-1:
 script:
   - export VERSION=$(date +%y.%m)
   - docker build -t myregistry/project/image:$VERSION

这会产生一个图像标签,如:myregistry/project/image:17.10

您可以使用date +%s 代替date +%y.%m 作为unixtimestamp。

根据您的 (git) 流程,您还可以使用 Gitlab CI env vars 提供的分支蛞蝓

【讨论】:

FORMAT 控制输出。解释的序列是:man7.org/linux/man-pages/man1/date.1.html【参考方案2】:

关于时间戳,另一种方法是使用与当前管道关联的现有变量。

见GitLab 13.10(2021 年 3 月)

用于作业开始和管道创建时间戳的预定义 CI/CD 变量

以前,如果您想参考工作开始的确切日期和时间 或创建了管道,您需要在脚本中检索这些时间戳。 现在,通过使用CI_JOB_STARTED_ATCI_PIPELINE_CREATED_AT,以 ISO 8601 格式和 UTC 时区提供。

感谢@Winkies 的贡献!

参见Documentation 和Issue。

很遗憾,这个变量不能直接用作图像标签。如referenced implementation issue 中所见,此变量的输出类似于2021-03-18T04:45:29Z。直接使用,你的图片会看起来像myimage:2021-03-18T04:45:29Z,这是无效的。

【讨论】:

以上是关于在 gitlab 管道中使用 semver 或时间戳的主要内容,如果未能解决你的问题,请参考以下文章

将此类版本控制命名为 semver 是不是正确?

仅当 git 标签不以字符串“Release”或“Test”开头时才在 Gitlab CI 中启动管道

在 GitLab Pipelines 中,有没有办法在分离合并请求时运行管道?

在 Gitlab 中触发该管道后获取管道 ID

Gitlab双管道触发问题

在 GitLab CI 管道中使用 docker-compose