6

bundle installビルドごとに大量の gem をインストールしないように、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 と にインストールされている gem が復元されますvendor/bundleが、まだこれが表示されます (これには多くの時間がかかります)。

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
...

したがって、機能するはずですが、機能しません。何が間違っている可能性がありますか?

4

1 に答える 1

19

解決策は簡単です。CircleCI はデフォルトでいくつかのコマンドを実行し、gem もデフォルトで にキャッシュします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 installコマンド (常に gem をインストールする) をbundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3. このような場合、最初にテストを実行したときにのみすべての gem がインストールされ、その後のすべてのビルドでは以前にキャッシュされた gem が使用されます。

于 2015-06-24T16:45:11.457 に答える