Travis CI

时间:2016-02-10 01:45:29

标签: performance caching docker continuous-integration travis-ci

是否可以在Travis CI上缓存泊坞窗图像?尝试在travis.yml中缓存带有cache.directories的/var/lib/docker/aufs/diff文件夹和/var/lib/docker/repositories-aufs文件似乎不起作用,因为它们需要root。

2 个答案:

答案 0 :(得分:12)

从Docker的角度来看,我认为你可以做到这一点的最佳方式(没有运行网络本地registry的可能性)是save Docker镜像并缓存导出的tar球。您需要load一开始而不是pull一张图片。这样你就不会搞乱docker存储实现。

install:
- docker pull busybox
- docker save busybox | gzip > docker/busybox.tar.gz
cache:
  directories:
  - docker

然后,在Travis运行之前,您需要load缓存的图像。

before_script:
- gzip -dc docker/busybox.tar.gz | docker load

对于特拉维斯来说,我不清楚的是,如果你需要在第一次之后阻止它运行install步骤。一旦缓存后,您不希望Travis每次都拉动并导出图像。我不确定cache指令是否会自动为您执行此操作?

接下来的主要问题是,这实际上是否比拉动图像更快:

  

缓存会破坏配置中列出的所有目录   并使用安全且受保护的URL将它们上传到S3,确保   上传档案的安全性和隐私性。

     

请注意,这使得我们的缓存不是网络本地的,它仍然受到约束   S3的网络带宽和DNS解析。这会影响到你   可以而且应该存储在缓存中。如果存储的档案大于a   在缓存中几百兆字节,你不太可能看到一个   速度提升很快。

您可能只是增加了开销。由于Docker注册表由Cloudfront支持,因此Travis已经从本地或至少关闭的亚马逊基础架构中提取压缩图像。也许可以向cache Docker images natively询问他们的功能,类似于他们对{​​{1}}包的操作,although it doesn't sound hopeful

答案 1 :(得分:3)

看看circleci推荐的内容:https://circleci.com/docs/docker/#caching-docker-layers

docker save / docker load与travis提供的目录缓存结合起来应该很容易。