はじめに
最近、CIの実行に6分~17分かかるようになっており、開発効率が低下しています。Bundle install
の結果をキャッシュすることで3分30秒短縮できたのでメモ。
困っていたこと
CIを構築した前任者が不在であるため、情報が不足していました。
CI実行を少しでも早くするために、依存関係のあるbundle install結果をキャッシュするようにしていたのですが、常に3分30秒かかっており、キャッシュが有効化されているように見受けられませんでした。
repo/venv
配下にキャッシュを生成・取得するようにしていたため、下記ページも参考にしつつ、キャッシュの格納先を vendor/bundle
配下に修正したのですが、状況は変わりませんでした。
キャッシュされない原因
vendor/bundle
配下にキャッシュがないため。同じキーでキャッシュの再作成・上書きはできないため、キャッシュキーを変更し、再度キャシュを再作成する。
実施したこと
キャッシュのキーを修正。v1-dependencies
から、 v2-dependencies
に変更。
version: 2 jobs: build: working_directory: ~/repo steps: - checkout # bundlerインストール - run: name: Configure Bundler command: | sudo gem update --system $RUBYGEMS_VERSION sudo gem uninstall bundler sudo rm /usr/local/bin/bundle sudo rm /usr/local/bin/bundler sudo gem install bundler -v $BUNDLER_VERSION # Download and cache dependencies - restore_cache: keys: - v2-dependencies-{{ checksum "Gemfile.lock" }} - v2-dependencies- - run: name: install dependencies command: bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs 4 --retry 3 - save_cache: key: v2-dependencies-{{ checksum "Gemfile.lock" }} paths: - vendor/bundle
キャッシュ結果
6秒程度で完了するようになりした!
まとめ
CIの実行時間が3分以上短縮されたため、開発効率が上がりました。CIがボトルネックになるのは非常にもったいないため、これからもできる限り高速化していきたいと思います。