circleciでshallow cloneするとlocalでの実行時も快適になって良さそうだ
circleciではLocal CLIが提供されていて、導入時にいちいちpushしてjobを実行しないで済む。 circleci.com
circleciをローカルで実行できるのはいいが、プロジェクトをcloneするcheckoutのstepの実行には時間がかかるし、ローカルでは save_cacheやrestore_cacheは利用できないので割とつらい。
そこでcheckoutのstepを利用するのを諦め、shallow cloneを行う方向にした。 さらに嬉しいことにcircleciの v2.1ではジョブなどをパッケージ化して共有することができる orbsという機能がリリースされたらしく、探して見るとshallow cloneを提供している orbもいくつかあるので、自分で0からコードを書く必要もない。
僕は他の記事でも紹介されていたganta/git@1.2.0
を利用させていただいた。
https://circleci.com/orbs/registry/orb/ganta/git
この記事を書いている時点では まだしっかり本番運用などはしていないので、そのあたりの快適さには言及できない。
ローカルでの実行はかなり早くなったので、ひとまずセットアップ時だけ使うにしてもかなり楽になった。
細い説明はしないが、実際に使う時に注意することとしては
- v2.1のcircleciをローカルで実行するには、circleci config process .circleci/config.yml でv2.0にコンパイルしてから実行する必要があるということ。
- ssh keyが存在するdirecotryをcircleciで作成したコンテナにマウントする必要があるということ。
今のところはプロジェクトのルートで以下のコマンドを実行してローカルで動かしている。
circleci config process .circleci/config.yml > .circleci/tmp_config.yml && circleci local execute -c .circleci/tmp_config.yml --job build --volume ~/.ssh:/home/circleci/.ssh && rm .circleci/tmp_config.yml