CircleCI2入門① CirlceCIについて
こんにちは、プログラマーの@Yuuです。
会社で行っているプロジェクトの1つを引き継ぐ事になり、そのプロジェクトでCircleCIを使っているため覚える必要が出てきました。
色々な記事をみてザックリとは理解出来たのですが、自分の中で整理・構築してみないと分からないところも多そうだなぁという印象・・。
そこでプライベートでも1コンテナであれば無料ということなので、これを機に自分で試してみつつ、備考録も兼ねてやった事を書いていきます。
また、この記事を書く数ヶ月前にCircleCIのバージョン2(CircleCI 2.0)が正式リリースされたようなので2.0の方で話を進めていきます。
スポンサーリンク
CircleCIとは?
CircleCIは、GitHub・BitBucketのプッシュやプルリルに反応して作動するCIサービス。
現在CircleCI 2.0となってDockerコンテナ上でテストを実行できるようになりました。
そもそもCIて何?
Continuous Integration(継続的インテグレーション)の略。
継続的インテグレーションとは、ソフトウェア開発において、ビルドやテストを頻繁に繰り返し行なうことにより問題を早期に発見し、開発の効率化・省力化や納期の短縮を図る手法。特に、専用のツールを用いてこのプロセスを自動化あるいは半自動化し、効率的に実施する方式。
つまりCIは手法・やり方。
CircleCIのような『CIツール・CIサービス』はその手法を行いやすくするためのツールやサービスであり、特に上記の最終行で書かれている
専用のツールを用いてこのプロセスを自動化あるいは半自動化
これを行うためのものという事ですかね。
CIツール
これらを手動でやるのは面倒だから自動化しよう、という事で出来たのが『CIツール』。
元祖CIツールと言えば『Jenkins』
Jenkins - Wikipedia より引用
エンジニアの方は1度は見たことがあるんじゃないかというJenkinsの執事のおじさま。
Jenkinsは自分でJenkins用のサーバ(CIサーバ・Jenkinsサーバ)を立てる必要があり、
- わざわざサーバを立ち上げなければいけない(めんどくさい)
- 属人化しやすい
など欠点があるため、CircleCIのような『CIサービス』と呼ばれるものが出てきました。
CIサービス
CIサービスはクラウド上に用意されており、GitHubやBitBucketなどと連携させて使います。
リモートリポジトリにプッシュ・プルリルを行ったタイミングなどで、テストを自動化したりサーバへのデプロイを自動化する事などが出来るようになります。
連携出来るサービスはCIサービス側で決められていて、
今回のCircleCIでは
- GitHub・BitBucketと連携
- プッシュ・プルリルのタイミングで任意の処理が出来る
という仕様になっています。
比較系の記事を見るとどのCIサービスを使うかは、
- privateなコンテナをいくつ使うか
- 1コンテナ辺りの金額
- GitHub・BitBucketなど連携出来るサービス
- 並列処理が出来るかなどのサービス内容
- サポートの体制
などで決まってくるようです。
その他のCIサービス
CircleCI以外の有名なCIサービスには以下のようなものがあります。
- TravisCI
- publicであればどれだけ使っても無料
→ そのためOSSの利用が多い
- publicであればどれだけ使っても無料
- AWS CodePipeline
- AWSのCIサービス
- Codeship
- BitBucketが使える
- プライベートリポジトリでも月間100回までのビルドなら無料
- Side CI
- 日本製のCIサービス
ザックリ調べたところTravis CIとCricleCIがCIサービスの中で2強みたいです
CircleCI, Travis CI, AWS CodePipeline, Codeship, Side CI - 調べる - Google トレンド
Jenkinsとの比較
よく比較されるJenkinsとの比較
- Jenkins
- 実行する処理を『ジョブ』という単位で管理する
- 自分で好きなようにジョブを設定出来る
- GitHub・BitBucketなど好きなサービスと連携出来る(設定すれば・・)
- 例えばcronのような定期処理が可能(設定すれば・・・)
- 運用が大変
- ex1: サーバがダウンしたので休日出勤します!(^q^)
- ex2: 継ぎ足しで作っていたから修正が大変
- Jenkins職人が生まれる
- 属人化しやすい
- CircleCI
- 運用しなくて良い
- その分人的コストがなくなる
- Jenkinsのように職人がいなくても大丈夫
- ymlで設定を管理
- 学習コストも低い
- CIサービスに対してお金がかかる
- 1コンテナ毎に$50/月(最初の1つは無料)
- CircleCI側で決められたサービス連携・タイミングでしか処理ができない
- GitHub・BitBucketにプッシュ・プルリルのタイミングでしか処理が出来ない
- 運用しなくて良い
以下スライドの「Jenkinsサーバが煙をあげていても、あなたは有給とれますか?」という文言を見た時に「自分だったらJenkins絶対使いたくないな・・」と思いました・・w
やろうと思えば何でも出来てしまう自由度の高さは魅力ですがその分運用は大変そう。
「Jenkins職人辞めちゃったから運用厳しいっす\(^o^)/」みたいな事が下手したら起きそうだし。
それ比べて連携出来るサービスや実行タイミングに制限があっても、CircleCIのようなCIサービスを使うのは、運用の事を考えるとすごく理にかなっているんでしょうね。
CircleCIで出来ること
- GitHub・BitBucketのプッシュ・プルリルを検知
- テストを自動化
- seleniumを使ったブラウザテストなども出来る
- Lintのチェック
- テスト後にはGitHubに自動的にコメントも出来る(コードで色々やらないといけなさそう)
- ビルドの自動化
- iOS・AndroidであればDeployGate、TestFlightでの配布もできる
- 結果の通知
- slackに通知、webhookを使ってHubotで通知
- サーバへのデプロイ
- herokuやAWSなど
CI上で.sh
の実行が出来るので、やろうと思えば大概の事は出来るんだろうなぁというイメージです。
CircleCI1.0 と CircleCI2.0 の違い
CircleCI 2.0は2017年6,7月ぐらいにリリースされた模様。
1から2への大きな変更点は、
Dockerが柔軟に使えるようになった・キャッシュ・Workflows
この3つのようです。
- 1.0
- Ubuntu固定
- Dockerも使えたけどCircleCIが用意した古いDocker固定だった
- 毎回CIの中でライブラリをインストールする必要があった
→ 起動の度にインストールを行うので時間がかかる(例えばnpm install
とか) - プロジェクトのルートフォルダに
circle.yml
を配置し、CircleCIの設定を記述
- 2.0
- 仮想マシン上で純粋なDockerコンテナを動かせる
- 必要なライブラリをセットアップしたDockerのイメージを用意出来る
→ 必要なライブラリがインストール済みになり時間が短縮 - キャッシュが柔軟に設定出来るようになった
- Workflowsという並列処理や実行フェーズを分ける機能の実装
→ 他のビルドツールだと『ビルドパイプライン』として存在しているらしい - プロジェクトのルートフォルダに
.circleci/config.yml
を配置し、CircleCIの設定を記述
まとめ
まずは「そもそもCIサービスてなんなの?CircleCIで何が出来るの?」というところからまとめてみました。
次からGitHubとCircleCI、その他のサービスとも連携させつつ、実際にCircleCIを試していきたいと思います。
次の記事書きました
CircleCI2入門② CirlceCIとGitHubを連携させる | Yuuの悠々自適Blog
この記事で参考にさせていただいたサイト
Jenkinsと完全にサヨナラして、CircleCIに移行した話 · tehepero note(・ω<) 2.0
CircleCI 2.0に移行して新機能を活用したらCIの実行時間が半分になった話 - クラウドワークス エンジニアブログ