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

Rem*_*tec 2 semantic-versioning gitlab gitlab-ci gitlab-ci-runner

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

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

简单的问题。有没有一种方法可以用gitlab中的semver或时间戳标记我的docker容器。

内置变量似乎并没有给我太多帮助。

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

如果无法执行此操作,是否可以从操作系统获取时间戳并将其用于yml文件?

Von*_*onC 6

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

请参阅GitLab 13.10(2021 年 3 月)

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

以前,如果您想引用作业启动或创建管道的确切日期和时间,则需要在脚本中检索这些时间戳。CI_JOB_STARTED_AT现在,可以通过使用和 轻松将它们用作预定义的 CI/CD 变量CI_PIPELINE_CREATED_AT,并以 ISO 8601 格式和 UTC 时区提供。

感谢@Winkies的贡献!

请参阅文档问题

不幸的是,这个变量不能直接用作图像标签。正如在引用的实现问题中看到的,该变量的输出类似于2021-03-18T04:45:29Z。直接使用,您的图像看起来像是myimage:2021-03-18T04:45:29Z无效的。


smileek在评论中补充道:

您可以对变量执行简单的字符串操作。
例如,${CI_PIPELINE_CREATED_AT:0:10}将为您提供前十个符号:2021-03-18out of 2021-03-18T04:45:29Z

您可以在“在 Bash 中提取子字符串”中查看更多信息。


Ste*_*tel 5

您可以.gitlab-ci.yml像这样使用时间戳记(摘自我们自己的用法,用于创建<year>.<month>标签和发行版:

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

这将导致图像标签如下: myregistry/project/image:17.10

您可以使用date +%s代替date +%y.%munixtimestamp。

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