我最近将我们的CI服务器挂接到git commit上,以构建docker映像。

我们构建了大约8个不同的容器,每个容器都有自己的语言/框架。一些是节点并具有package.json,其他一些是不包含语义版本信息的python服务。

我的问题不是关于如何创建标签的问题,而是关于为标签创建值的问题。图片?谁应该是跟踪/增加构建版本的权威?

评论

您当前创建标签的方法是什么?

听见您在问什么。您说的是“语义版本号”,必须由人工分配(我们的A.I.s不够先进,无法确定提交的语义...)。但是随后您询问“增加构建版本”。那么,您实际上对什么感兴趣?您要确保东西只是“增加”(例如SCN /系统更改号或其他)吗?还是您对版本号的语义内容(即,是否具有不兼容的更改)感兴趣?

#1 楼

我会将您定向到我的帖子Coupling Docker注册表和源代码管理,其中dmaze从官方forums.docker.com进行了回答。提交哈希和分支名称或标签即可。

在Dockerfile中,使用LABEL记录构建的源。这可能包括来自分布式源代码管理(git,Mercurial)的提交哈希,分支名称(如果相关),任何发布标签(如果存在)以及可能的详细信息,例如最后一次提交的时间戳。码头工人历史记录和码头工人检查应该能够显示这些内容。 / imagename:123abc7,quay.io/mycorp/imagename:dmaze-test)。如果发布标签很容易获得,CI系统也应该使用这些标签推送图像。

我们当前正在使用分支名称/提交哈希的组合。对我们来说,这似乎足够了。时间戳,尽管它们很有用IMO只是增加了混乱,因为它们没有提供提交哈希所没有的任何内容。
我同意030关于以下内容:构建版本

其他团队之间进行适当的沟通,CI负责100%维护此类内容。

#2 楼


如何确保每个标签对特定图像具有唯一的语义版本号?


一个人可以创建一个由多个元素组成的标签,例如时间戳,git commit哈希和语义版本的组合。后者必须手动设置,而前两个可以自动设置。这样的标签如下所示:

20171015141729-58617f500f7efe236c7ba6a1dfdf37a478b4c878-0.1.4


该标签包含生成日期,提交和语义版本。如果docker映像在生产中运行并且发现了错误,则说明该产品的版本,内部代码以及生成映像的时间以及在什么情况下都知道。在我看来,这应该是跟踪/递增构建版本的权限吗?标签可以自动化,这样的工具是完成任务的正确工具。

#3 楼

我想您使用了像Jenkins这样的用于CI / CD的DevOps工具,我建议采用以下方法:您可以对作业进行配置,以便可以使用Jenkins环境变量“ BUILD_ID”,当触发该作业将其标记到图像时,该变量将检索该作业的内部版本ID。这样,您可以对Docker映像进行版本控制。请检查以下示例。

例如:-sudo docker build -t <image_name>:<BUILD_ID>

因此,如果您的SCM具有类似标签的机制,则可以在各自的构建ID中检查标签在基于作业的版本中或在JENKINS HOME_FOLDER中的版本ID的config.xml中。