Gitlab CI:是否有可能加快'捆绑安装'?

时间:2016-05-03 12:48:55

标签: ruby-on-rails gitlab gitlab-ci gitlab-ci-runner

我使用gitlab.com和CI与共享docker runner,在每次提交的master上运行我的Ruby on Rails项目的测试。我注意到大约90%的构建时间花在'bundle install'上。是否有可能以某种方式在提交之间缓存已安装的gem以加速“bundle install”?

更新

更具体地说,以下是我的.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 个答案:

答案 0 :(得分:1)

我不知道你是否有特殊要求一直使用apt-get,如果不需要,可以使用其中的命令创建自己的dockerfile。这样你的基础已经有了那些更新/ nodejs包。如果您想稍后更新,可以随时再次更新dockerfile。

对于你的宝石,如果你想要它更快,你也可以在它们之间缓存它们。通常这是每个工作和每个分支。请参阅此处示例http://doc.gitlab.com/ee/ci/yaml/README.html#cache

cache:
  paths:
  - /cache

我更喜欢添加key: "$CI_BUILD_REF_NAME",以便对于该特定分支,我的文件会被缓存。请参阅environments以查看可以使用的密钥。

答案 1 :(得分:0)

您可以设置BUNDLE_PATH环境变量并将其指向您希望安装宝石的文件夹。第一次运行bundle install时,它将安装所有宝石,后续运行只会检查是否有新宝石,只安装那些宝石。

注意:这应该是默认行为。检查您的BUNDLE_PATH env var值。是否将其更改为临时的每个提交文件夹或其他内容?或者, 90%的构建时间用于从rubygems.org下载gem元信息?在这种情况下,您可能需要考虑使用--local标志(但不确定这是CI服务器上的一个好主意)。

Fetching source index for https://rubygems.org/

查看.gitlab-ci.yml后,我发现您的--path选项丢失=。我认为它应该是:

      - bundle install --path=/cache