さいきん、Jenkinsのテストが遅い...
specの肥大化...
Jenkinsのインスタンスがm1.small…
などなどは持続可能なCIを目指す上で大きな障壁であります。
じゃ、インスタンスでかくすりゃいいじゃん
という事ができる方、分散rspecやってるぜheheな方はそれで幸せになれると思います。
え、あんまりお金ないし
みたいな仲間は、@camelmasa 先生の記事読むと幸せになります。
プライベートリポジトリを激安にCI出来るCircle CIが凄い。
少し前から、Qiitaの皆さんにオススメしていただいたので検討してはいたのですが、ここまで良いとは思わなかった。
めっさ軽いし、安い
Dashboardからして軽い。
日本に置いているのか先読みしているのか分からないけど、軽い。
1つのプライベートプロジェクトなら$19/moという破格。
実際、早くなったよ
ちゃんと計測してないのですが、10分強かかっていたrake specが、2分弱にまでになりました。早い。
最初のビルドのときはキャッシュがないので、時間がかかりますが、2回目以降は早くなります。
さらに、もうちょっとお金をかけれる方は並列実行してもっと早く出来ます。
ちなみに、標準的なrailsプロジェクトは何も設定を書かずにspecが通りました。すごい。
Jenkins先生はビルド専門に
もともと、
local --[git push]--> Github --[Github Plugin]--> Jenkins --[spec&cap]--> Staging/Production
みたいな感じでした。
ビルドまでhookしています。
本番にまで上がっちゃうってのは賛否両論かと思いますが、
Stagingにデプロイされるってのは悪くないかなと思います。
が、ちょっとJenkins先生の仕事が多すぎたので、Circle CIに負担してもらう形になりました。
local --[git push]--> Github --[Web Hook]--> Circle CI --[Hook]--> Jenkins --[cap]--> Staging/Production
Circle.ymlに設定をかく
今はこんなかんじです。
# SEE: https://circleci.com/docs/config-sample
# Ruby Version List: https://circleci.com/docs/environment#ruby
machine:
ruby:
version: 1.9.3-p327
deployment:
staging:
branch: develop
commands:
- wget --spider -nv http://jenkins_url/git/notifyCommit?url=[git_url]&branches=develop
production:
branch: master
commands:
- wget --spider -nv http://jenkins_url/git/notifyCommit?url=[git_url]&branches=master
Rubyのバージョンは指定しなくても動きますが、書いておいた方が無難でしょう。裏側はRVMらしいです。
最初は単純なwebhooksの項目にJenkinsのURLを追加していましたが、そうすると失敗してもwebhookが飛んでしまうので困っていました。
素直にdeployment以下に書けば良かったみたいです。
Greenのときだけcommandsが実行されます。
ちなみに、Jenkinsはgit pluginで受け取ると良いと思います。
TOKEN指定のWeb hookでも良いと思いますが、
git pluginの場合、差分が無ければビルドしないで無視してくれるので。
良いですね、とても良いですね。
Circle CIはもっと色々できるみたいなので、
もっとシンプルに出来るかもしれません。
詳しくは公式のドキュメント(英語)をご覧ください。