2017-06-12 77 views
2

我有多个环境。它们是调试,开发和产品。我想通过最新的dev(最新的)或dev(版本1.1)或prod(最新的)来参考图像。我将如何去标记构建和推送?Docker:为环境标记图像时的最佳做法是什么

我的第一个想法是为每个环境调试,开发和产品创建单独的存储库。但我开始怀疑我是否可以只用一个存储库来做到这一点。如果可能对一个容器做什么,在构建和推送时语法会是什么?

回答

6

这是什么工作最适合我和我的团队,我建议:

我推荐每个项目单回购所有环境,更容易管理。特别是如果你有微服务,那么你的项目由多个微服务组成。为每个项目管理一个回购是一件痛苦的事情。

例如,我有一个用户api。 码头回购是users。此回购使用alpha,devbeta

我们创造我们的CI/CD服务称为$DOCKER_TAG的环境变量,并在构建创建时设置它,像这样:

DOCKER_TAG: $(date +%Y%m%d).$BUILD_NUMBER =>这是在bash。

其中$BUILD_NUMBER先前由触发CI/CD运行时正在运行的构建设置。例如,当我们合并一个PR时,一个构建被触发,因为构建号码。 1,所以$BUILD_NUMBER: 120171612.1 所以我们的码头工人形象是:

生成的标签使用时看起来像这样users:20171612.1

为什么这种格式?

  • 它允许我们部署在不同环境下使用 运行任务相同的标签。
  • 它可以帮助我们跟踪图像何时被创建以及它构建的属于哪个 。
  • 通过构建编号,我们可以根据需要找到提交信息并将它们映射到一起,便于排查。
  • 它允许我们为每个项目使用相同的码头回购。
  • 很高兴知道我们何时从标签本身创建图像。

所以,当我们合并时,我们创建一个单一的构建。然后,根据需要将构建部署到不同的环境中。我们不会为每个环境创建独立的构建。我们跟踪部署在哪里。

如果在具有特定标签的环境中存在一个错误,我们会在这种情况下拉出这样的标签,构建并搜索并重现问题。如果我们发现问题,我们在标签20171612.1中有内部编号,所以我们知道构建编号。 1有问题。我们检查我们的CI/CD服务,告诉我们最新的提交是什么。我们从git中检出提交散列并调试并解决问题。然后,我们将它作为修补程序进行部署,例如。

如果您还没有CI/CD,而且您正在手动执行此操作,只需手动设置该格式的标签(几乎完全键入完整的字符串),而不是使用内部版本号,请使用提交短git的哈希值(如果您使用的git):

20170612.ed73d4f

所以,你知道什么是最当前提交这样你就可以解决问题与特定的图像,并映射回代码来创建修正需要。

你也可以为你的标签定义任何其他的后缀映射到代码版本,所以你可以很容易地排除故障(例如,如果你使用的话,映射到git标签)。

尝试一下,根据需要进行调整,并为您和您的团队做最有效的工作。围绕标记有很多方法。我们尝试了很多,这是迄今为止我们最喜欢的。

希望这有帮助。

1

我认为“最新”是最后一幅生产性图片。这是我期待的码头枢纽,尽管没有开发中的图像。

另一方面,您可以使用标签,例如0.0.1-dev。当这个图像完成后,您可以再次执行标记并推送,然后存储库会检测到这些图层已经存储在存储库中。

现在,当您正在讨论一个候选版本以便生产时,尽管不在环境保护之下,您仍然只能拥有语义版本。这就是我会做的。

相关问题