https://github.com/CircleCI-Public/config-preview-sdk を見てたら commands
が便利そうだったのでためしに個人プロダクトに入れてみた。
準備
Advanced Settingsの「Enable build processing (preview)」で有効にしないと使えないので注意
Before (CircleCI 2.0)
Ruby製のアプリのCIを構築してると
restore_cache
でbundle installのキャッシュをリストア- bundle install
save_cache
でキャッシュを保存
というのが頻出すぎてリファクタリングしたかった。
実際に使ってた設定を抜粋したのが下記です。
version: 2 save_bundle_cache_option: &save_bundle_cache_option key: v2-bundle-{{ checksum "Gemfile.lock" }} paths: - ~/app/vendor/bundle restore_bundle_cache_option: &restore_bundle_cache_option keys: - v2-bundle-{{ checksum "Gemfile.lock" }} - v2-bundle jobs: rspec: <<: *default steps: - checkout - restore_cache: <<: *restore_bundle_cache_option - run: ./.circleci/setup_bundle.sh - save_cache: <<: *save_bundle_cache_option - run: ./.circleci/setup_database.sh - run: bundle exec rspec - run: bundle exec codeclimate-test-reporter
rspec以外にrubocopとかの実行でもbundle installが必要なのでDRYにするためにrestore_cache
やsave_cache
のオプションを抽出したり、bundle installの処理をsetup_bundle.sh
に抽出しています。
#!/bin/bash -xe bundle install --jobs=4 --retry=3 --path vendor/bundle bundle clean # Resolve bundler version difference between Gemfile.lock and pre-installed in CI gem install restore_bundled_with --no-document restore-bundled-with
After (CircleCI 2.1 preview)
restore_cache
, bundle install, save_cache
の組み合わせを setup_bundle
というcommandとして抽出できたので再利用しやすくなりました。
version: 2.1 commands: setup_bundle: description: "Setup bundle with cache" steps: - restore_cache: keys: - v2-bundle-{{ checksum "Gemfile.lock" }} - v2-bundle - run: name: Setup bundle command: | set -xe bundle install --jobs=4 --retry=3 --path vendor/bundle bundle clean # Resolve bundler version difference between Gemfile.lock and pre-installed in CI gem install restore_bundled_with --no-document restore-bundled-with - save_cache: key: v2-bundle-{{ checksum "Gemfile.lock" }} paths: - ~/app/vendor/bundle jobs: rspec: <<: *default steps: - checkout - setup_bundle - run: ./.circleci/setup_database.sh - run: bundle exec rspec - run: bundle exec codeclimate-test-reporter
bundle install系の処理が1つになったことでBeforeにあったsave_bundle_cache_option
や setup_bundle.sh
にような工夫が不要になったのが嬉しい
所感
今回はcommandsしか使ってないですが他の機能を利用することでリファクタリングの余地が増えそう。
まだpreviewで色々変更ありそうなので個人プロダクト全部には投入しづらいけど、正式版になったら上のような修正を全部に入れたい。
作業PR
https://github.com/sue445/chatwork_mention_task/pull/184/files