【问题标题】:How to speed up CI build times when using docker?使用 docker 时如何加快 CI 构建时间?
【发布时间】:2016-09-17 01:59:09
【问题描述】:
我目前使用 docker + travis CI 来测试/部署我的应用程序。这在本地工作得很好,因为我有 node_modules 等的数据量,并且 docker 的层提供缓存加速构建。
但是,当我将代码推送到 travis 时,它必须从头开始重新构建和安装所有内容,这需要很长时间! Travis 不支持缓存 docker 层 atm。有没有其他方法可以加快我的构建速度,或者有其他类似的工具允许 docker 层缓存?
【问题讨论】:
标签:
node.js
jenkins
docker
continuous-integration
travis-ci
【解决方案1】:
您可能想调查i3wm 是如何解决类似问题的。
主要开发者写在design behind his Travis CI workflow。引用相关部分:
基本思路是基于Debian测试搭建Docker容器
然后在该容器内运行所有构建/测试命令。我们的
Dockerfile 安装编译器、格式化程序和其他开发工具
首先,然后安装基于 i3 的所有构建依赖项
debian/control 文件,这样我们就不需要重复构建
Travis 和 Debian 的依赖项。
这很好地解决了当前的问题,但意义重大
成本:构建 Docker 容器会增加相当多的挂钟时间
Travis 的运行,我们想给我们的贡献者快速的反馈。
长构建时间的解决方案是缓存:我们可以简单地上传
Docker 容器到Docker Hub 并使后续构建使用
缓存版本。
我们决定将容器缓存一个月,或者直到输入
构建环境(目前为Dockerfile 和debian/control)
改变。从技术上讲,这是通过一个小 shell 脚本实现的
称为ha.sh(明白吗?哈希!),它打印了 SHA-256 哈希
输入文件。这个哈希,附加到当前月份,是我们使用的
作为 Docker 容器的标签,例如2016-03-3d453fe1.
请参阅我们的.travis.yml,了解如何将它们连接在一起。