是否有任何 CI 服务允许您构建 Docker 容器并使用 Docker 构建缓存



我有一堆Docker容器都是使用docker-compose连接的(以前的图)。我发现那些标榜自己为"Docker CI"服务的服务通常只是在谈论使用 Docker 来运行他们的构建工作线程。

我想要一个持续集成服务,在运行之间保留 Docker 构建缓存,而不是启动一个全新的工作线程/文件系统/构建上下文。否则,构建绝对需要永远。理想地管理(与 https://github.com/groupon/DotCi 不同,没有CircleCI现成的每构建数据库)。

我唯一发现的是TeamCity(旧,你不能像使用CircleCI那样轻松地在yaml文件中对构建任务进行版本控制,你必须维护基础设施等)。 Quay.io 不像 CircleCI 和 Travis 那样配置数据库,所以你必须将 dev 和 prod 分为两部分,并在容器内安装一个并在容器构建期间运行单元测试(ew - 你不能生成到未构建的容器中来调试东西!

如何在 Docker 容器群集上运行持续集成?

CircleCI 1.0

CircleCI 允许您构建 Docker 容器作为构建的一部分: https://circleci.com/integrations/docker

然而,您是对的,这不会缓存 Docker 映像 - 在我们的堆栈上要正确执行此操作有点棘手,但我们计划尽快解决这个问题。

与此同时,许多客户使用 CircleCI 的内置(非 Docker)缓存,通过使用 docker save/docker load : https://circleci.com/docs/docker#caching-docker-layers 来缓存它。这并不理想,但它应该会让你度过难关,直到我们能够更好地支持这一点。

针对 CircleCI 2.0 进行了更新

CircleCI 2.0 以 Docker 为中心。您可以构建 Docker 镜像,利用层缓存,使用 Docker Compose,甚至使用官方和自定义 Docker 镜像作为构建环境。

我目前正在使用 CircleCI,请参阅 http://tschottdorf.github.io/cockroach-docker-circleci-continuous-integration 以获取使用 docker 缓存的良好指南

可交付的

也值得一试,因为他们的整个基础设施都基于Docker,并使用可交付的形成编排多个Docker容器。

Codeship 现在支持存储 Docker 映像缓存并重新检索此缓存,以加快构建速度。

https://codeship.com/documentation/docker/caching/

有一个相关的问题"如何让 gitlab-ci-runner DinD 图像缓存中间图像?

即使我们的解决方案需要最少的基础设施维护(我们需要运行自己的运行器),我认为它值得一看。

基本上,我们不在 Docker 中运行 Docker,但我们只为运行者创建一个单独的 VM。这对安全和清理任务有一些影响,另请参阅我们运行器的自述文件。

也许随着Docker对各种CI系统的支持得到改进,这个解决方案将来会过时,但现在它是性能,维护和可用性之间的良好结合。

你见过沃克吗?它支持"自带容器",将缓存您的映像(我认为是按工作线程计算的,但是在几次构建之后,通常启动会减少到自定义映像的几秒钟),并且 afaik 还允许构建 Docker 映像。

缺点:它需要太多的GitHub权限。

最新更新