背景
所属するチームでJenkinsを使ってCI/CDを取り込んでいます。最近業務の量が大きくなったので、PRの数も大変増えて来ました。その故に、Jenkinsの負担も結構重くなりまして、下記の問題が行っています。
- CIが重いので、単体テストは走れない状態で失敗になりました。
- PRのレビューやマージすることが一旦止まれてしまう。
- CDも影響されまして、デポロイも失敗になりました。
そして、最近ではなくて、いつでも存在している問題もあります。
- CI結果は見辛い。コケっている原因を調べる際に、まずJenkinsをログインして、後はタスクを探して、その「console出力ログ」をちゃんと観ないと原因が分からない。
- 今回のCI結果が後のタスクで被られる。CI結果を早く見ないと消えるの大変困っています。
- 改修はややこしい。Jenkinsの改修はインフラの方を頼まなければならない。CIはそもそも開発を上手く進めていくツールと思うので、開発チームが手軽で改修できれば助かります。
- 技術的負債
CircleCI
CircleCIは現在流行っているCIツールとして、いろんなプロジェクトに使われています。
例:
https://github.com/facebook/react/pull/20849
目の前のまとめ
- 並行性が優れてしまうので、「走れない状態で失敗する」ことを回避することができます。
- CDと分離しまうので、デポロイに影響を与えて来ないにする。
- Github Friendly。GithubでCircleCIの結果は見えやすいです。そして、他のタスクで被られることがないです。
例:
https://app.circleci.com/pipelines/github/facebook/react/10476/workflows/2145d75f-ea91-4fbe-b8fe-121c8b00e9f1/jobs/273374
- 改修はやり易い。CircleCIの改修はチーム内で対応できます。そして、手数は大変減らしてしまう。
例:https://github.com/facebook/react/blob/master/.circleci/config.yml
将来のメリット
既存の問題を解決するだけではなく、将来にもいろんなことができそうになります。
gemの導入
現在でrspec、rubocopだけの検証は大規模なプロジェクトにとって、コード品質を保証するために全然足りないと思うので、Dangerやbrakemanなど検証gemをどんどん導入する必要があります。
参考:
https://github.com/danger/danger
https://github.com/presidentbeef/brakeman
https://github.com/cucumber/cucumber-ruby
多言語対応
様々なプログラム言語は自身の特性によって、一番適用のシナリオンもそれぞれです。
例えば、 Railsのweb開発速度が早い。Pythonは豊富なlibraryを持っています。Golangの並行処理はすごい。云々。
多言語を取り込んだプロジェクトにとって、JenkinsでCI方針を作って実装することより多言語対応できるなCircleCIがやり易いです。
communityが強い
googleやstackoverflowでもcircleCIのcommunityが活躍なので、問題解決はとても便利です。
参考:
https://discuss.circleci.com/
https://stackoverflow.com/search?q=circleCI
価格も高くない
JenkinsやAWS側のアップグレードより、CircleCIの価格はあまり高くない。
参考:https://circleci.com/pricing/
まとめ
今回CircleCIを導入して来たい理由は、
- 目の前の問題を解決したい。CircleCIの並行処理を活用して、チーム開発を上手く進めて欲しい。
- 将来の改善やリファクタリングを準備する。
- 流行っていることを追いかけたい。