Gitlab CI:是否可以加速'bundle install'?

Gitlab CI: Is it possible to speed up 'bundle install'?

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

更新:

更具体的,下面是我的.gitlab-ci.yml的内容。 'test' 脚本的前 3 行占用了构建 运行 4-5 分钟的大约 90% 的时间。

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

您可以设置 BUNDLE_PATH 环境变量并将其指向要安装 gem 的文件夹。第一次 运行 bundle install 它将安装所有 gems 并且随后的 运行s 将只检查是否有任何新的 gems 并且只安装那些.

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

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

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

      - bundle install --path=/cache

我不知道您是否对一直执行 apt-get 有特殊要求,如果不需要,请创建您自己的 dockerfile,其中包含这些命令。这样您的基地就已经有了 updates/nodejs 个包裹。如果您想稍后更新,您可以随时再次更新您的 dockerfile。

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

cache:
  paths:
  - /cache

我更喜欢添加 key: "$CI_BUILD_REF_NAME" 以便为该特定分支缓存我的文件。请参阅 environments 了解您可以使用更多的键。