我使用gitlab.com和CI与共享docker runner,在每次提交的master上运行我的Ruby on Rails项目的测试 . 我注意到大约90%的构建时间花在'bundle install'上 . 是否有可能以某种方式缓存提交之间安装的宝石,以加快'捆绑安装'?
UPDATE:
更具体地说,下面是我的.gitlab-ci.yml的内容 . 'test'脚本的前3行占用了大约90%的时间,使构建运行4-5分钟 .
image: ruby:2.2.4
services:
- postgres
test:
script:
- apt-get update -qy
- apt-get install -y nodejs
- bundle install --path /cache
- bundle exec rake db:drop db:create db:schema:load RAILS_ENV=test
- bundle exec rspec
2 回答
我不知道你是否对apt-get一直有特殊要求,如果不需要,可以用它们中的命令创建你自己的dockerfile . 这样你的基础已经有了那些更新/ nodejs包 . 如果您想稍后更新,可以随时再次更新dockerfile .
对于你的宝石,如果你想要更快,你也可以在构建之间缓存它们 . 通常这是每个工作和每个分支 . 看这里的例子http://doc.gitlab.com/ee/ci/yaml/README.html#cache
我更喜欢添加
key: "$CI_BUILD_REF_NAME"
,以便对于该特定分支我的文件被缓存 . 请参阅environments以查看可以使用的键 .您可以设置
BUNDLE_PATH
环境变量并将其指向您希望安装宝石的文件夹 . 第一次运行bundle install
时,它将安装所有宝石,后续运行只会检查是否有任何新宝石,只安装那些宝石 .注意:这应该是默认行为 . 检查
BUNDLE_PATH
env var值 . 是否将其更改为临时的每个提交文件夹或其他内容?或者,是否有90%的构建时间花在从rubygems.org下载gem元信息上?在这种情况下,您可能需要考虑使用--local
标志(但不确定这是CI服务器上的一个好主意) .看了你的.gitlab-ci.yml后,我发现你的--path选项缺失= . 我认为它应该是: