持续集成/持续部署中的Docker镜像版本控制

8
我们正在使用两个众所周知的概念来实现持续集成和持续交付流程:Linux二进制包和Docker镜像。
大部分工作已经完成:我们从GitLab仓库获取代码,编译并将其放入存储在Aptly中的deb包中,然后为我们拥有的每个服务创建Docker镜像,并将这些镜像推送到私有的Docker注册表服务器。接下来将这些镜像滚动到测试环境。最后,启动服务并执行验收测试。这是一个连续的过程,每当有人向origin/master提交代码时就会启动。

enter image description here

仍然不清楚如何区分存储在Docker Registry中的稳定镜像?我们必须跟踪每个镜像的状态,因为我们需要对稳定服务器进行定期更新。显然,有些发布(即镜像版本)将无法通过验收测试,并必须标记为不可用并在下一次持续交付迭代中被过滤掉。似乎没有默认实现此功能的方法: 1. 默认图像repo/tag是一个平凡的纯字符串,无法同时包含版本号、构建日期和QA标记。 2. 标签(在1.6中引入)可能是解决方法的好起点,但我们无法找到重新标记现有图像的机会(请注意,我们需要更新图像“元数据”,考虑QA结果)。没有可用的按标签值查询图像的方法,但我们可能可以包装Docker API。
那么,分配版本给Docker镜像的正确方式是什么?如何存储与QA相关的信息?我们如何“突出显示”稳定的镜像构建?哪些Jenkins CI功能可用于实现这些目的?请分享您的经验。
更新:过了一段时间后,我不得不在Docker问题跟踪器中开始讨论。可能有人也会发现它有用。

2
你应该使用从 Github 收集到的输入回答你自己的问题并接受它。这肯定会帮助其他人。 - Thomasleveil
1个回答

2
看起来你的问题已经在那个讨论链接中得到了回答,但我想指出的是,在Bleacher Report,我们从未将没有通过CI的图像推送到Docker Hub(私有或托管)。
以下是我们的流程:
- 推送代码 - CircleCI创建一个带标签的构建 - 在带标签的容器内运行测试 - 如果测试通过,CircleCI会将带标签的容器推送到Hub
详细解释请参见此处

感谢您的回答。不幸的是,CircleCI对我们来说并不适用,因为它是一种云解决方案,而我们需要在自己的设施上构建流水线。 - Vitaly Isaev
CircleCI可以被Jenkins替换,但是不幸的是我没有详细的文章。然而,其概念相同,Jenkins监听git提交触发器,然后构建docker镜像、运行它、在其中进行测试,如果通过则将其推送到注册表。 - feelobot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接