[英]Tagging Docker image (SemVer)
我需要一点帮助。 标记 docker 图像的最佳选择是什么。 我正在寻找制作 bash 脚本。 这是推荐的还是有任何不同的解决方案? 我想添加一种方法来标记由 jenkins 构建步骤生成的 docker 图像。 我需要自动增加 BuildNumber,但要手动设置 MajorVersion 和 MinorVersion。
我找不到任何与此相关的示例。 您能否提供任何示例来管理我的版本号。
根据我的经验,使用内部版本号标记图像作为图像“版本”的一部分并不是一个很好的做法。 如 SemVer所述,版本号的第三部分是“补丁”,代表一个非破坏性修复。
仅仅添加一个内部版本号作为补丁版本的问题在于,您不一定在每个版本中都代表一个补丁。 例如,假设您正在修复(将作为补丁版本发布)。 但是你没有在第一次提交/推送到你的工作分支时正确地修复。 第一个构建已经是构建号增量,从其他开发人员到其他分支的任何其他推送也是如此。 而这一切都取决于您的 CI 是如何设置的。
如果您需要输入内部版本号,那么您可以使用您的 CI 内部版本号(我认为所有 CI 解决方案都提供)并将它们作为 semver 中的第四个元素添加到您的标签中(例如: 2.4.1-2312
,其中2312
是内部版本号),一旦发布,您就可以将标签提升到2.4.2
。
如果您想遵守 docker 通常的做法,您还应该将2.4.2
标记为2.4
、 2
和latest
,如果您要发布它。
我的最后一个建议是始终使用您正在构建的提交的完整 SHA 标记图像,因为没有更简单的方法将图像与代码库中的某个时间点进行匹配。
只是为已接受的答案添加一点。 根据语义版本规格( https://semver.org/ ),后缀-foo
版本xyz-foo
被认为是“预发布版”。
构建元数据,例如构建号,应附加在任何预发布版本标签之后作为+build
,例如表示构建 33 使用1.2.3-beta1+33
或1.2.3+33
。
不幸的是,Docker 标签不能使用+
字符! 根据docker tag
参考(强调我的):
标签名称必须是有效的 ASCII 并且可以包含小写和大写字母、数字、下划线、句点和破折号。 标记名称不能以句点或破折号开头,最多可包含 128 个字符。
因此,请注意,您无法精确地遵循语义版本控制并在 docker 标签中包含构建信息。 这就是人生 ...
我将遵循@gvilarino 的建议并简单地使用破折号-
分隔内部版本号,无论是否带有预发布标签。 例如,对于 build 33
1.2.3-beta-33
或1.2.3-33
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.