我正在使用 docker 镜像为一堆存储库运行测试。每个存储库都有自己的测试,当然还有自己的 Gemfile。所以,基本上,每当我提交这些存储库时,一个新的构建就会开始。在此构建中,GitLab:
- 下载 docker 镜像。
- 安装所有需要的 gem。
- 运行测试。
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/