2014年3月31日月曜日

C++ が利用可能な CI ツールまとめ


最近まで CloudBees の Jenkins を使っていたのですが、Free プランの制限を超えてしまい、代わりの CI 環境をちょうど探していたので試してみました。

要件:
・C++ 対応
・無料プラン内でできることに限る
・ビルドマトリックスが組める

C++ 非対応
冒頭の記事を参考にいろいろ見てみましたが、言語サポートに C++ ないものがほとんどでした。。。


C++ 対応してないので今回は却下。
(※ といってもコンパイラさえあれば言語対応を謳ってなくても使える気がするが…)

Drone.io
Drone.io はリポジトリに設定ファイルが不要です。
設定はウェブページで行います。リポジトリにファイルを置かなくて良いのは1つのメリットですが、ビルドマトリックスが組めないため、今回は却下。

TravisCI
TravisCIは、オープンソースであれば無料で利用できます。
私も以前から利用していました。

私が思う TravisCI の利点は以下のとおりです。
gcc/clang が選べる
最新のコンパイラも使える(参考:Travis CI で最新の gcc を使って自動テスト - sorry, inumplemented:
マトリックスが組める
他サービスとの連携Coveralls, Coverity Scan, etc...)

CI ツールを探している目的の一つに「様々なコンフィグでの網羅的テストを走らせたい」というのがあり、TravisCI はそれを満たしています。ただ、今のところ TravisCI でのテストは「コンパイラごとのテスト」「他サービスとの連携」での利用が主な目的になってます。なるべく1回のビルドを短くしたいので、今回はマトリックスを組まないことにしました。

OpenShift
そこで最後に紹介するのが、OpenShift です。
OpenShift は Red Hat が提供する PaaS(Platform as a Service) で、無料プランでも Jenkins サーバーを作れます。
というわけで、ここでマトリックスを組むことにしました。
OpenShift については説明を省きます。ググってみてください。

さて、結局 Jenkins に戻ってきたわけですが、CloudBees と比べて見た感じ。
ビルドが遅い
時間制限はなし
並列ビルドが可能?

時間制限がない点は良いのですが、ビルドが非常に遅いです。
下の画像は、8x5 のマトリックスジョブの所要時間です。左が OpenShift 、右が CloudBees です。

小さくて見難いと思いますが(クリックで拡大されます)、OpenShift は 11時間、CloudBees は 12分です。
ものすごく差がありますが、実は CloudBees のはです。どういう計算でこの時間になっているのかわかりませんが、実際は数時間かかっています。(3分弱 x 8 x 5)(制限時間の消費が減るので嬉しいですが…)
しかし、それでも CloudBees のほうが速いのは変わりません。

あと、OpenShift では同時ビルド数を任意の数に設定できますが、私が試した感じだとうまくテストが回りませんでした。(リソース不足?)

OpenShift の Jenkins は「Jenkins 自体に特に制限はないが、動作環境が低スペックであるためできないこともある」という感じでした。CloudBees と比べると性能が劣りますが、私が使う分には問題ないのでこちらを使うことにしました。(テストがトータルで16時間かかるが、1日2回以上コミットすることはないので問題なし)

ちなみに、OpenShift の Jenkins ですがデフォルトだとプラグインの追加・更新ができないように見えますが、
「プラグインの管理」→「高度な設定」の「アップデートサイト」の URL を http:// から https:// に変更すると更新できるようになります。ハマりどころなので、これから使おうという方は覚えておくといいです。
参考:unable to install plugins on Jenkins instance in openshift - Stack Overflow

最後に
最終的には、TravisCI + OPENSHIFT に落ち着きましたが、これは私の利用目的から選んだ結果なので、これが一番イイというわけではありません。
利用目的にあったツールを選ぶのが一番だと思います。

0 件のコメント:

コメントを投稿