https://github.com/CircleCI-Public/config-preview-sdk を見てたら commands
が便利そうだったのでためしに個人プロダクトに入れてみた。
github.com
準備
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
https://github.com/sue445/chatwork_mention_task/blob/bd6d7ec65d4bc0a8e38d55e082e740539737e538/.circleci/config.yml
rspec以外にrubocopとかの実行でもbundle installが必要なのでDRYにするためにrestore_cache
やsave_cache
のオプションを抽出したり、bundle installの処理をsetup_bundle.sh
に抽出しています。
bundle install --jobs=4 --retry=3 --path vendor/bundle
bundle clean
gem install restore_bundled_with --no-document
restore-bundled-with
https://github.com/sue445/chatwork_mention_task/blob/bd6d7ec65d4bc0a8e38d55e082e740539737e538/.circleci/setup_bundle.sh
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
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
https://github.com/sue445/chatwork_mention_task/blob/654e5137002bd611f44674d2e69b8ae1b4d31102/.circleci/config.yml
bundle install系の処理が1つになったことでBeforeにあったsave_bundle_cache_option
や setup_bundle.sh
にような工夫が不要になったのが嬉しい
所感
今回はcommandsしか使ってないですが他の機能を利用することでリファクタリングの余地が増えそう。
まだpreviewで色々変更ありそうなので個人プロダクト全部には投入しづらいけど、正式版になったら上のような修正を全部に入れたい。
作業PR
https://github.com/sue445/chatwork_mention_task/pull/184/files