首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CircleCI宝石缓存

CircleCI宝石缓存
EN

Stack Overflow用户
提问于 2015-06-05 12:06:46
回答 1查看 3.2K关注 0票数 6

是否有可能缓存gems,这样bundle install就不会在每次构建时都安装大量的gems?每次构建都需要5分钟的时间,这太过了。

我已经将其添加到circle.yml配置中:

代码语言:javascript
复制
dependencies:
  cache_directories:
    - "/home/ubuntu/.rvm/gems/ruby-2.1.2/gems/"

这是由bundle show gem_name提供的公共目录,其中放置了所有的系统宝石。

在此添加之后,系统会写入这样的日志:

代码语言:javascript
复制
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,但是,我仍然看到这一点(这需要很长时间):

代码语言:javascript
复制
Installing rake 10.4.2
Installing i18n 0.7.0
Installing json 1.8.2
Installing minitest 5.5.1
...

而不是

代码语言:javascript
复制
using rake 10.4.2
using i18n 0.7.0
using json 1.8.2
using minitest 5.5.1
...

所以,看起来,它应该起作用,但它不能。有什么不对的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30666176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档