我有多个环境。它们是debug,dev和prod。我想通过最新的dev(最新)或dev(1.1版)或prod(最新版)来引用图像。我将如何标记构建和推送?
我的第一个想法是为每个环境debug,dev和prod创建单独的存储库。但我开始怀疑我是否可以只用一个存储库来做到这一点。如果它可能与一个容器有关,那么构建和推送时的语法是什么?
答案 0 :(得分:13)
这对我和我的团队最有效,我推荐它:
我建议针对所有环境的每个项目使用一个回购,这样更容易管理。特别是如果你有微服务,那么你的项目由多个微服务组成。每个项目每个环境管理一个回购是一件痛苦的事。
例如,我有一个用户api。
docker repo是users
。此回购邮件由alpha
,dev
和beta
使用。
我们在CI / CD服务中创建一个名为$DOCKER_TAG
的env变量,并在创建构建时设置它,如下所示:
DOCKER_TAG: $(date +%Y%m%d).$BUILD_NUMBER
=>这是在bash。
在触发CI / CD运行时,运行的构建先前设置了$BUILD_NUMBER
。例如,当我们合并PR时,会触发构建,因为构建号。 1,所以$BUILD_NUMBER: 1
。
结果标记在使用时如下所示:20171612.1
所以我们的泊坞窗图片是:users:20171612.1
为何选择此格式?
因此,当我们合并时,我们创建一个单独的构建。然后根据需要将该构建部署到不同的环境。我们不会为每个环境创建一个独立的构建。我们会跟踪在哪里部署的内容。
如果某个环境中存在某个标记的错误,我们会在此条件下提取此标记,构建和解决问题并重现问题。如果我们发现问题,我们在标记20171612.1
中有内置编号,因此我们知道编译号。 1有问题。我们检查我们的CI / CD服务,它告诉我们最新的提交。我们从git和debug中查看提交哈希并修复问题。然后我们将其部署为修补程序,例如。
如果您还没有配置CI / CD,并且手动执行此操作,只需手动设置该格式的标签(几乎按原样键入完整字符串)而不是内置编号,请使用提交短git哈希(如果你使用git):
20170612.ed73d4f
因此,您知道什么是最新的提交,以便您可以解决特定图像的问题,并映射回代码以根据需要创建修复。
您还可以为您的代码定义映射到代码版本的任何其他后缀,以便您轻松排除故障(例如,如果您使用的话,请映射到git代码)。
尝试一下,根据需要进行调整,并为您和您的团队做最有效的事情。有很多方法可以解决标记问题。我们尝试过很多,到目前为止我们最喜欢这个。
希望这有帮助。
答案 1 :(得分:3)
有两种思想流派,稳定的标记,您可以更新单个标记,以及唯一标记。每个都有其优点和缺点。在部署到自我修复群集时,稳定标记可能会产生不稳定性,因为新节点可能会提取新版本,而群集的其余部分运行的版本稍微过旧。唯一标记是部署的最佳实践。但是,要管理OS&amp ;;的基本映像更新。框架修补,您将希望在dockerfile中构建稳定的标记,并启用自动容器构建。有关视觉效果的详细介绍,请点击此处: https://blogs.msdn.microsoft.com/stevelasker/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/
答案 2 :(得分:1)
我认为“最新”是最后一张富有成效的形象。这是我在docker hub中的期望,尽管没有开发中的图像。
另一方面,您可以使用标签,例如0.0.1-dev。完成此映像后,您可以再次执行标记并按下,然后存储库将检测到这些层已存在于存储库中。
现在,当你是一个即将出版的候选版本时,你必须只拥有语义版本,尽管不在环境保护中。这就是我要做的。