完全に個人的な備忘録です。
こちらは 2015年11月 に調べた情報をもとに書いています。
間違いや古い情報が含まれている可能性があります。
承知のうえで見てください。
はじめに
最近 CI ネタをよく投稿していましたので、このへんで iutest のテスト用に使っている(使おうと思っている)CI サービスの比較をまとめてみました。
参考にしたところ:
はじめに
今回比較するサービスは以下の10個。(アルファベット順)
サポート言語
まずはサポート言語を比較します。
※1:JVM based languages
※2:JavaScript(with Node.js)
※3:MinGW
こちらはあくまでも公式がサポートしていると謳っている言語で、どこまで何ができるかはそれぞれ違うので注意。
また、ここに載っていない言語でも基本的には環境をセットアップする処理を書けば、CI 可能だと思います。
自分の場合 C++ で書かれたプログラムの CI で利用しているので、素もしくは C++ 環境で実行したときにインストールされている g++ と clang++ のバージョンを載せておきます。
リポジトリホスティングサービス連携
※1: GitLab and self-hosted git repositories is coming soon.
次はリポジトリホスティングサービス連携です。
Github はどのサービスも対応しています。Bitbucket は対応していないサービスが少しあります。
Github PR 対応は、pull request に対しての CI が実行されるかどうかです。
(drone.io は頑張ればできるらしい。)
Self Hosted は Github や Bitbucket などのホスティングサービス以外に、自前のサーバーなどに立てた Git リポジトリなどを使用できるかどうかです。
これに対応しているところはほとんどありませんでした。
(調べきれてないだけで使えるかもしれないが…)
プロジェクト設定/ビルド関係
※1: 最新コミットのみ
※2: コンテナを複数使うことで可能。
ブログズミ: Circle CI 始めました
※3: Free and Open Source 設定だと使えない。
次は設定やビルド環境です。
CI サービスのほとんどが、YAML か WebUI で設定をします。目的に合わせて、お好きな方を選んでください。
Branch Filter は任意のブランチを CI 対象 or 除外できるかどうかという点で○×を付けてますが、それぞれサービスごとにできることが違うので注意。どういう形式なのかドキュメントで確認してください。
private ビルドはビルド結果などが他者から見えないようにできるかどうかです。
最後は時間制限です。時間制限はサービスごとに大きく差が出る結果になりました。
また、ログが一定時間出力されないとタイムアウトするサービスもあります。
先週のブログ「
Snap CI 始めました」にも書きましたが、Snap CI はステージごとの時間制限なので複数ステージにすることで、より長く使うことができるので、この点においては最強です。
Notifications
※1: Custom step を使うことで可能 (
https://app.wercker.com/#explore/steps/search/notify)
最後は通知。バッジやメールはどこでもあります。
Github commit status は CI 結果をコミットステータスとして送る機能です。
pull request のコミットにこんな感じにつきます。
他の通知として、それぞれチャットなどに対応しています。
たいていの CI サービスが WebHook が使えるので、対応していない通知でもちょっと頑張れば対応できます。
(試してはないです。)
まとめ
今回紹介した CI サービスは(semaphore 以外)すべて利用しています。それぞれ別の目的(テストや検証)のために使っているのでどれも必要ではありあすが、強いてオススメをあげるとしたら
Travis CI、AppVeyor、Shanp CI でしょうか。
Travis CI はかなり有名ですので言うまでもないかなと、
AppVeyor は Windows での貴重な CI 環境ですので、欠かせません。最近、知名度が上がっているようにも感じてます。Windows 環境の CI だと Visual Studio Team Service (Visual Studio Online) もありますが、無料枠だと時間制限がキツイのと、しばらくログインしていないとビルドを実行してくれないのがメンドクサイです。
Snap CI は最近使い始めたばかりですが、便利に使えそうな印象でした。
Shippable や Wercker も便利で iutest の CI 環境としては欠かせないのですが、
(iutest では python で wandbox api を叩いて、gcc/clang の各種バージョン対応のチェックをしている。)
C++ の CI 環境としては言語サポートされていない点もあり、少し手間かなと思います。
最後に
今回は自分が使っているものを自分目線でまとめました。なので、間違ってる部分もあると思いますし、デプロイや Docker 関係など触れていない部分もあります。
もし、こちらの記事を参考にされて CI サービスを始める時は、求める機能や条件が整っているか改めて公式ドキュメントなどを確認してください。
また、間違いなどありましたらドシドシ指摘していただけると助かります。
以上。