ruby - 在 GitLab CI 包构建中缓存 gem

标签 ruby caching docker bundle gitlab

我正在使用 docker 镜像为一堆存储库运行测试。每个存储库都有自己的测试,当然还有自己的 Gemfile。所以,基本上,每当我提交这些存储库时,一个新的构建就会开始。在此构建中,GitLab:

  1. 下载 docker 镜像。
  2. 安装所有需要的 gem。
  3. 运行测试。

docker 镜像有一些预安装的包,比如 ruby​​ 或 gcc,所以我不会浪费任何时间在每个构建中重新安装这些包,但我仍然必须安装所有的 gem,因为每个存储库都有自己的 Gemfile,它们有点小不同。

问题是,我可以做些什么来缩短构建时间?我在 build install 命令上浪费了很多时间,而且大多数时候它一遍又一遍地为每个存储库安装相同的包。

最佳答案

根据 doc , 例子 gitlab-ci.yml:

image: ruby:2.5.1

variables:
  BUNDLE_PATH: vendor/ruby

cache:
  key: $CI_PROJECT_NAME
  paths:
    - vendor/ruby

test:
  script:
    - bundle install -j $(nproc) --path vendor
    - gem install rubocop --no-ri --no-rdoc
    - rubocop

production:
  type: deploy
  script:
    - gem install dpl
    - dpl --provider=heroku --app=admin --api-key=$HEROKU_API_KEY
  only:
    - master

这会将您的 gem 添加到缓存中,并将在另一个构建中重新使用它。但是,当构建将在另一个执行器上运行时,它可能不会被使用。

关于ruby - 在 GitLab CI 包构建中缓存 gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36983006/

相关文章:

docker - 使用 docker 运行多个项目,每个项目都使用 docker-compose 运行

ruby-on-rails - Anemone 擦洗一定的页面深度

ruby - 通过方法语法调用的运算符方法的优先级

ruby - 在 RSpec 输出中显示断言数量?

java - 缓存 URL 内容

google-chrome - Azure 流量管理器浏览器缓存问题

ruby-on-rails - 如何在RestClient获取请求头中传递参数并访问 Controller 中的参数

android - 如何以编程方式计算已安装应用程序的所有缓存大小?

docker - 如何从 docker 镜像复制文件 - dockerfile cmd

sed - 如何从检查 docker 容器中获取暴露的端口?