紙の裏のメモ

崖の上のポニョみたいなイントネーションです。坂の上の雲みたいな(ry

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