我需要一点帮助。 标记docker映像的最佳选择是什么。我正在寻找使bash脚本。是推荐还是有其他解决方案? 我想添加一种方法来标记由jenkins构建步骤生成的docker映像。 我需要自动增加BuildNumber,但要手动设置MajorVersion和MinorVersion。
我找不到与此相关的任何示例。您能否提供任何示例来管理我的版本号。
答案 0 :(得分:1)
根据我的经验,用内部编号标记图像作为图像“版本”的一部分不是一个很好的做法。 As stated in SemVer,版本号的第三部分是“补丁”,表示一个不间断的修复程序。
仅将内部版本号添加为补丁程序版本的问题在于,您不一定在每个内部版本中都代表一个补丁程序。例如,假设您正在开发一个修补程序(它将作为修补程序版本发布)。但是,您在第一次提交/推送到工作分支时并没有正确地修复此问题。从其他开发人员到其他分支的任何其他推动,第一个构建将已经是构建号增量。这完全取决于您的CI的设置方式。
如果需要输入内部版本号,则可以使用CI内部版本号(我认为所有CI解决方案都可以提供该内部版本号),并将其添加到标签中,作为系统中第四个元素(例如:2.4.1-2312
,其中2312
是内部版本号),一旦发布,您就可以将标签撞到2.4.2
。
如果您要遵守docker的常规做法,还应将2.4.2
标记为2.4
,2
和latest
(如果要发布)
我最后的建议是,始终用正在构建的提交的完整SHA标记图像,因为没有比这更容易的方法将图像与代码库中的时间点进行匹配。
答案 1 :(得分:0)
只是为已接受的答案添加一点。根据语义版本控制规范 (https://semver.org/),版本 -foo
中的后缀 x.y.z-foo
被视为“预发布版本”。
构建元数据,例如内部版本号,应附加在任何预发布版本标签之后作为 +build
,例如表示版本 33 使用 1.2.3-beta1+33
或 1.2.3+33
。
不幸的是,Docker 标签不能使用 +
字符!根据 docker tag
reference(强调我的):
标签名称必须是有效的 ASCII,并且可以包含小写和大写字母、数字、下划线、句点和破折号。标签名称不能以句点或破折号开头,最多可包含 128 个字符。
因此,请注意,您无法精确地遵循语义版本控制并在 docker 标签中包含构建信息。这就是生活...
我将遵循@gvilarino 的建议,只需使用破折号 -
来分隔内部版本号,无论是否带有预发布标签。例如。用于构建 33
1.2.3-beta-33
或 1.2.3-33
。