assets:precompile
に毎回1分ほどかかっていたので嬉しい速度改善 😋
以下の記事を参考にさせていただきました 🙏
CircleCI 2.0に移行して新機能を活用したらCIの実行時間が半分になった話 - クラウドワークス エンジニアブログ
仕組みとしては、precompile対象のアセットの変更をgitのrevisionを使ってチェックして、変更があればprecompile
、なければスキップする、という流れです。
自分のプロジェクトではwebpacker + react-railsを使ってるので以下を考慮しました。
- compile対象のディレクトリ(
app/javascript
)の変更もチェックする - compile後のassets(
public/packs-test
)もキャッシュする
.circleci/config.yml
... steps: ... # precompile対象のassetsのgitのrevisionをkeyにする - run: name: create key for cashing assets command: | git rev-parse $(git log --oneline -n 1 app/assets lib/assets vendor/assets Gemfile.lock app/javascript | awk '{{print $1}}') > VERSION - restore_cache: keys: - asset-cache-{{ arch }}-{{ .Branch }}-{{ checksum "VERSION" }} - asset-cache-{{ arch }}-{{ .Branch }} - asset-cache # assetsのrevisionが変わってなければキャッシュから使う。変わっていればprecompile - run: name: assets:precompile command: | current_revision=VERSION previous_revision=public/assets/VERSION if [ ! -e $previous_revision ] || ! diff $previous_revision $current_revision; then bundle exec rake assets:precompile cp -f $current_revision $previous_revision else echo "Skipped." fi - save_cache: key: asset-cache-{{ arch }}-{{ .Branch }}-{{ checksum "VERSION" }} paths: - public/assets - public/packs-test - tmp/cache/assets/sprockets
どんどん改善していくでー 💪