Docker镜像版本控制用于持续集成/持续部署

Vit*_*aev 7 version-control continuous-deployment jenkins docker docker-registry

我们使用两个众所周知的概念实现我们的持续集成和持续交付流程:Linux二进制包和Docker图像.

大部分工作已经完成:我们从GitLabrepo 获取代码,编译它并放入deb存储的包中Aptly,然后我们Docker为我们拥有的每个服务创建图像并将图像推送到私有Docker Registry服务器.然后将这些图像滚动到测试环境.最后,我们启动服务并执行验收测试.这是一个连续的过程,每当有人推送时,它就会启动origin/master.

在此输入图像描述

目前尚不清楚的是如何区分存储在Docker Registry中的稳定图像

我们必须跟踪每个图像的状态,因为我们需要执行稳定服务器的定期更新.显然,某些版本(即图像版本)不会通过验收测试,必须标记为不可用,并在每次下一次持续交付迭代时过滤掉.

似乎没有此功能的默认实现:

  1. 默认图像repo/tag是一个普通的普通字符串,不能同时包含版本号,构建日期和QA标记.
  2. Labels(在1.6中介绍)可能是解决方法的良好起点,但我们无法找到重新标记现有图像的机会(请注意,我们需要在考虑QA结果的情况下更新图像"元数据").没有可用的方法通过标签值查询图像,但我们可能会包装Docker API.

那么将版本分配给Docker Images的正确方法是什么?如何存储质量保证相关信息?我们如何"突出"稳定的图像构建?Jenkins CI可以使用哪些功能来达到这些目的?请分享您的经验.

UPD:过了一段时间我不得不在Docker问题跟踪器中开始讨论.可能有人会发现它也很有用.

小智 2

看起来你的问题已经在该讨论链接中得到了解答,但是我只想指出,在 Bleacher Report 中,我们从未将图像推送到未首先通过 CI 的 Docker 中心(私有或托管)。

  • 代码推送
  • CircleCI 创建标记构建
  • 测试在标记容器内运行
  • 如果测试通过,CircleCI 会将标记的容器推送到集线器

详细解释