CI サービスをいくつか触ってみたのでまとめ。
今回の目的は、テストを実行すること。なので、ビルドやデプロイ辺りはちゃんとは見ていない。
ドキュメントで確認しただけの項目などもあったりするので、間違っていたらごめんなさい。教えてもらえると助かります。
ただ、これは記事を書いた時点での比較で、今後のサービスの変更に対応する予定はないです。
触ってみたサービス一覧
アルファベット順。
codeship ってのもあったけど、無料プランは月100ビルドまでとかで常用には耐えないと感じたので中身見てない。
機能比較
機能比較は全て無料プランでのもの。有料だと対応している場合でもここでは x にしている。
比較項目は私の独断と偏見で適当に選出した。
項目 |
AppVeyor |
CircleCI |
Drone IO |
Magnum CI |
semaphore |
shippable |
Travis CI |
wercker |
備考 |
YAML による設定 |
○ |
○ |
× |
○ |
× |
○ |
○ |
○ |
リポジトリ内の YAML ファイルからビルド手順を設定できる |
Web UI による設定 |
○ |
○ |
○ |
○ |
○ |
× |
× |
× |
Web UI でビルド手順のスクリプトを書くことができる |
GitHub 連携 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
GitHub のリポジトリ一覧から新規プロジェクトを作れる |
BitBucket 連携 |
○ |
× |
○ |
○ |
○ |
○ |
× |
○ |
BitBucket のリポジトリ一覧から新規プロジェクトを作れる |
GitHub PR 対応 |
○ |
○ |
× |
× |
○ |
○ |
○ |
○ |
GitHub の Pull Request を自動でビルドしてステータスを返せる |
ビルド環境キャッシュ |
× |
○ |
× |
× |
○ |
× |
× |
○ |
複数ビルド間を跨ぐキャッシュ領域を利用できる |
手動リビルド |
○ |
○ |
× |
○ |
○*1 |
○ |
○ |
○ |
過去のビルドを手動でリビルドできる |
複数環境ビルド |
○ |
× |
× |
× |
× |
○ |
○ |
× |
環境変数などで複数の環境に対してビルドできる |
private なプロジェクト |
× |
○ |
× |
○ |
○ |
○ |
× |
○ |
ビルド状況などを private にできる(かなり未検証) |
ビルド時間制限 |
30分 |
20分 |
15分 |
30分 |
60分 |
60分 |
50分 |
25分 |
無出力時間による制限が別途ある場合もある |
YAML による設定の利点は、プロジェクト構成の変更とビルド手順の変更を紐付けることができること。
Web UI による設定の利点は、プロジェクトに直接関係ないファイルを置かなくて済むこと。特にファイルを置く権限がない場合などには助かる。
各サービスについて雑感
以下、かなり主観かつざっくりな雑感。
Drone IO
https://drone.io/
Go 言語製の CI サービス。
他のサービスがビルド手順をいくつかに分割している中、Drone IO のビルド手順は1つのみと、とてもシンプル。
Pull Request 時のビルドは、がんばればできるらしいけど、それでもPR以外の普段の push で API が叩かれたり、ビルドページから Pull Request のページへ飛べなかったりするので、できるとは言わない方が良さそう。
Magnum CI
https://magnum-ci.com/
現時点でまだ public beta の CI サービス。結構前からずっと beta な気がする。
使い勝手については特に問題はない。普通に使える。
beta なので、private リポジトリが無制限で使える模様。いつ beta が取れるのかは不明。
semaphore
https://semaphoreapp.com/
ビルド中にスレッドが使えるのが特徴。ビルドパイプラインの各コマンド単位で、どのスレッドで走らせるか指定できる。無料で 1 ビルド中に 2 スレッドまで使える。
あとはプロジェクト構成を見て、一般的な構成の場合は自動で検出してビルド設定を自動で終わらせてくれるらしい。私が試したプロジェクトは一般的な構成ではなかったので、どこまでやってくれるのかよくわかってない。
wercker
http://wercker.com/
他の CI と比べても変わった、box と step という特徴がある。
box はテストの実行環境。ユーザーが作成したものを wercker ディレクトリに登録しておけば、誰でも使えるようになる。特定のツールがインストール済みの環境などを作っておけば、ビルド時間が短縮できる。標準でいくつか用意されているので、それらを使ってももちろんよい。
step はビルドの手順の1つ。bash で言う1つのコマンドで、wercker ではこの step のリストをビルド手順として指定する。step は、特定の動作を抽象化してまとめたもので、Amazon 3S との同期とか、npm install とか、そういう感じのが1つの step として登録されている。最悪 script step というのがあるので、これで bash でやってもよい。この step もユーザーが自作できる。
まとめ
無料でもこれだけの選択肢があるというのがすごい。
よりどりみどりなので、各自のユースケースにあった CI サービスを選んで使うといいと思う。