首页 文章

Gitlab CI:是否有可能加快'bundle install'?

提问于
浏览
2

我使用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 回答

  • 0

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

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

    cache:
      paths:
      - /cache
    

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

  • 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
    

相关问题