标记Docker映像(SemVer)

时间:2019-03-07 13:04:07

标签: docker kubernetes dockerfile

我需要一点帮助。 标记docker映像的最佳选择是什么。我正在寻找使bash脚本。是推荐还是有其他解决方案? 我想添加一种方法来标记由jenkins构建步骤生成的docker映像。 我需要自动增加BuildNumber,但要手动设置MajorVersion和MinorVersion。

我找不到与此相关的任何示例。您能否提供任何示例来管理我的版本号。

2 个答案:

答案 0 :(得分:1)

根据我的经验,用内部编号标记图像作为图像“版本”的一部分不是一个很好的做法。 As stated in SemVer,版本号的第三部分是“补丁”,表示一个不间断的修复程序。

仅将内部版本号添加为补丁程序版本的问题在于,您不一定在每个内部版本中都代表一个补丁程序。例如,假设您正在开发一个修补程序(它将作为修补程序版本发布)。但是,您在第一次提交/推送到工作分支时并没有正确地修复此问题。从其他开发人员到其他分支的任何其他推动,第一个构建将已经是构建号增量。这完全取决于您的CI的设置方式。

如果需要输入内部版本号,则可以使用CI内部版本号(我认为所有CI解决方案都可以提供该内部版本号),并将其添加到标签中,作为系统中第四个元素(例如:2.4.1-2312,其中2312是内部版本号),一旦发布,您就可以将标签撞到2.4.2

如果您要遵守docker的常规做法,还应将2.4.2标记为2.42latest(如果要发布)

我最后的建议是,始终用正在构建的提交的完整SHA标记图像,因为没有比这更容易的方法将图像与代码库中的时间点进行匹配。

答案 1 :(得分:0)

只是为已接受的答案添加一点。根据语义版本控制规范 (https://semver.org/),版本 -foo 中的后缀 x.y.z-foo 被视为“预发布版本”。

构建元数据,例如内部版本号,应附加在任何预发布版本标签之后作为 +build,例如表示版本 33 使用 1.2.3-beta1+331.2.3+33

不幸的是,Docker 标签不能使用 + 字符!根据 docker tag reference(强调我的):

<块引用>

标签名称必须是有效的 ASCII,并且可以包含小写和大写字母、数字、下划线、句点和破折号。标签名称不能以句点或破折号开头,最多可包含 128 个字符。

因此,请注意,您无法精确地遵循语义版本控制并在 docker 标签中包含构建信息。这就是生活...

我将遵循@gvilarino 的建议,只需使用破折号 - 来分隔内部版本号,无论是否带有预发布标签。例如。用于构建 33 1.2.3-beta-331.2.3-33