我有一堆Docker容器都使用docker-compose(之前的无花果)连接起来。我发现那些宣传自己的服务是" Docker CI"服务通常只是讨论使用Docker来运行他们的构建工作者。
我想要一个持续的集成服务,它在运行之间保留Docker构建缓存,而不是启动一个全新的worker / filesystem / build上下文。否则,构建绝对永远。理想的管理方式(与https://github.com/groupon/DotCi不同,它与CircleCI的现成的每个构建数据库不一样。)
我唯一发现的是TeamCity(旧的,您可以在yaml文件中轻松创建版本任务,就像使用CircleCI一样,您必须维护基础架构等)。 Quay.io没有提供像CircleCI和Travis那样的数据库,所以你必须分开dev和prod并在容器内安装一个并在容器构建期间运行单元测试(ew - 你不能产生一个未构建的容器来调试东西!)。
如何在Docker容器群集上运行持续集成?
答案 0 :(得分:15)
CircleCI允许您构建Docker容器作为构建的一部分:https://circleci.com/integrations/docker
然而,你没有对Docker镜像进行缓存是正确的 - 在我们的堆栈上做这件事有点棘手,但我们正计划很快解决这个问题。
与此同时,许多客户使用了docker save
/ docker load
:https://circleci.com/docs/docker#caching-docker-layers使用CircleCI的内置(非Docker)缓存来缓存它。它并不理想,但它应该让你度过难关,直到我们能够更好地支持这一点。
CircleCI 2.0以Docker为中心。您可以构建Docker镜像,利用图层缓存,使用Docker Compose,甚至可以使用官方和自定义Docker镜像作为构建环境。
答案 1 :(得分:3)
我目前正在使用CircleCI,请参阅http://tschottdorf.github.io/cockroach-docker-circleci-continuous-integration以获取使用docker缓存的良好指南
shippable也值得一试,因为它们的整个基础架构都是基于docker并使用shippable formations编排多个docker容器。
答案 2 :(得分:2)
Codeship现在支持存储Docker镜像缓存并对其进行检索以加快构建速度。
答案 3 :(得分:0)
有一个相关问题"How can I let the gitlab-ci-runner DinD image cache intermediate images?"。
即使our solution需要最少量的基础设施维护(我们需要运行自己的跑步者),我认为值得一看。
基本上我们不在Docker中运行Docker,但我们只为跑步者创建一个单独的VM。这对安全性和清理任务有一些影响,请参阅我们的跑步者的README。
随着Docker对各种CI系统的支持得到改善,这个解决方案将来可能会过时,但现在它在性能,维护和可用性之间是一个很好的混合。
答案 4 :(得分:-2)
你见过wercker吗?它支持“自带容器”,将缓存您的图像(我认为是基于每个工作者,但是在一些构建之后,通常使用自定义图像将启动减少到几秒),并且afaik还允许构建Docker镜像。