CircleCIでcacheを利用する

2015.08.22

はじめに

仕事でcircleciを使ってテストが時間が掛かるようになってしまったので修正したい。 テスト自体を並列で動かして短縮することも可能であろうが、並列ではしることをあまり考慮されていないテストに現状なってしまっているため初期コストが高そうなので後回しにする またdockerの導入も大変そうなので後回しにしてできるところから手をつける。

毎回ダウンロードしてきているものをcacheにいれることにする。

How cache works

circleciのcacheの概要はこちらに書いてある。 https://circleci.com/docs/how-cache-works

cacheについて

cacheの方法は二つあります

1, cache_directories

circle.ymldependencies: cache_directoriesのセクションを追加してディレクトリを指定すれば、そこのディレクトリはcacheとして次回のインスタンスにも同じものが残る。

2, cache_directories
  • Bower
  • Bundler
  • CocoaPods
  • Go
  • Gradle
  • Maven
  • NPM

これらのようなもmanagerを使っていた場合自動的にcacheされる。

Per-branch cache

cacheされる粒度はbranchごとにされる。ブランチを切って最初のpushの場合Githubのデフォルトブランチが使えわれる。デフォルトブランチにcacheがなかった場合他のブランチからのcacheが使われる。

Clearing the cache

cacheを消すためにはcircle.ymlに下記のようにかけばcacheを消してくれる。

dependencies:
  post:
    - rm -r ~/.gradle

普通に消すだけですね。はい。 勝手にcacheされてるものを消すためにはこのようにかけばよいのでしょうか。

検証してみてわかったこと/思ったこと

  • without cacheで行った場合cacheを使わないだけでcacheを消してくれることはしない。
  • without cacheかつwith sshはできない。(探したが見つからなかった。)
  • 運用していてcache自体を一度消したくなったときはwith sshで入って手で消すしかなさそう
  • 何度もcircleCIの挙動を確認したい場合は確認するための最小限のcircle.yamlで確認した方がよい。

まとめ

circleCIのチューニングは確認に時間が掛かったり挙動がよくわからなかったりして大変だが、将来を考えると時間が減っていいことしかないのでもっと早めにやるべきだった。

このエントリーをはてなブックマークに追加
<< ISUCON5の予選に参加した話
golangで数字を三桁ごとでカンマ区切りにする >>
@yudppp
Web engineer.