CircleCI 宝石缓存
CircleCI gems caching
是否可以缓存 gem,这样 bundle install
就不会为每个构建安装一堆 gem?每次构建都需要 5 分钟,这太多了。
我已将其添加到 circle.yml
配置中:
dependencies:
cache_directories:
- "/home/ubuntu/.rvm/gems/ruby-2.1.2/gems/"
这是bundle show gem_name
提供的通用目录,所有系统gem都放在这里
添加后系统写这样的日志:
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
所以,据我所知,它恢复了系统 gem 和安装到 vendor/bundle
中的 gem,但是,我仍然看到这个(这需要很多时间):
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
...
所以,看起来,它应该工作,但没有。有什么问题吗?
解决方法很简单:CircleCI 运行默认在vendor/bundle
中有一些命令并且默认缓存gems在vendor/bundle
,所以不需要在cache_directories
中添加任何东西。
在这些默认命令中有 bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
,它检查缓存目录中是否存在 gem,如果不存在则安装它们。
在我的例子中,我的项目由多个应用程序(主应用程序、公共 UI、API 客户端和 API 模拟)组成,分为 4 个不同的回购协议。他们中的大多数人需要 bundle install
命令。
我唯一需要做的就是用 bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
替换我所有的 bundle install
命令(总是安装 gems)。在这种情况下,所有 gem 仅在我第一次 运行 测试时安装,并且所有后续构建都使用以前缓存的 gem。
是否可以缓存 gem,这样 bundle install
就不会为每个构建安装一堆 gem?每次构建都需要 5 分钟,这太多了。
我已将其添加到 circle.yml
配置中:
dependencies:
cache_directories:
- "/home/ubuntu/.rvm/gems/ruby-2.1.2/gems/"
这是bundle show gem_name
提供的通用目录,所有系统gem都放在这里
添加后系统写这样的日志:
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
所以,据我所知,它恢复了系统 gem 和安装到 vendor/bundle
中的 gem,但是,我仍然看到这个(这需要很多时间):
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
...
所以,看起来,它应该工作,但没有。有什么问题吗?
解决方法很简单:CircleCI 运行默认在vendor/bundle
中有一些命令并且默认缓存gems在vendor/bundle
,所以不需要在cache_directories
中添加任何东西。
在这些默认命令中有 bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
,它检查缓存目录中是否存在 gem,如果不存在则安装它们。
在我的例子中,我的项目由多个应用程序(主应用程序、公共 UI、API 客户端和 API 模拟)组成,分为 4 个不同的回购协议。他们中的大多数人需要 bundle install
命令。
我唯一需要做的就是用 bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
替换我所有的 bundle install
命令(总是安装 gems)。在这种情况下,所有 gem 仅在我第一次 运行 测试时安装,并且所有后续构建都使用以前缓存的 gem。