是否有可能缓存gems,这样bundle install就不会在每次构建时都安装大量的gems?每次构建都需要5分钟的时间,这太过了。
我已经将其添加到circle.yml配置中:
dependencies:
cache_directories:
- "/home/ubuntu/.rvm/gems/ruby-2.1.2/gems/"这是由bundle show gem_name提供的公共目录,其中放置了所有的系统宝石。
在此添加之后,系统会写入这样的日志:
restoring cache v4/company/repo_name/dependency/circle-ci/42/mGWhlYQIxyOy0GZtt4QmCw__.tar.gz
restoring home/ubuntu/repo_name/vendor/bundle, home/ubuntu/.m2, home/ubuntu/.ivy2, home/ubuntu/.go_workspace, home/ubuntu/.gradle, home/ubuntu/.rvm/gems/ruby-2.1.2/gems因此,据我所知,它恢复安装在vendor/bundle中的系统gems和gems,但是,我仍然看到这一点(这需要很长时间):
Installing rake 10.4.2
Installing i18n 0.7.0
Installing json 1.8.2
Installing minitest 5.5.1
...而不是
using rake 10.4.2
using i18n 0.7.0
using json 1.8.2
using minitest 5.5.1
...所以,看起来,它应该起作用,但它不能。有什么不对的?
发布于 2015-06-24 16:45:11
解决方案很简单: CircleCI默认运行一些命令,默认情况下也在vendor/bundle中缓存宝石,因此不需要向cache_directories添加任何内容。
这些默认命令包括bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3,它检查缓存目录中是否存在gems,如果它们不存在,就安装它们。
在我的例子中,我的项目由多个应用程序(主应用程序、公共UI、API客户端和API模拟)组成,分成4种不同的repos。他们中的大多数都需要bundle install命令。
我唯一需要做的就是用bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3替换我所有的bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3命令(这些命令总是安装gems)。在这种情况下,所有的gems都是在我第一次运行测试时安装的,下面的所有构建都使用以前缓存的gems。
https://stackoverflow.com/questions/30666176
复制相似问题