読者です 読者をやめる 読者になる 読者になる

CircleCIやTravisCIよりもかなり安くCIできるPhantomCIを試してみた

CI 開発 DevOpts

今回は新手のCIサービスであるPhantomCI(ふぁんとむしーあい)を紹介しましょう。

PhantomCI - Docker Based Continuous Integration

f:id:a-yamada:20150218230639p:plain

トップページにCircleCIとTravisCIのプランの比較マトリックスがあるように、思いっきり意識しています。

主な特徴

まずは主な特徴をザッと見てみましょう。

並行ビルド無制限

平行ビルド数(コンテナ数)に制限は無く、価格も変わりません。

成功ビルド従量型課金

PhantomCIはビルドが成功した場合にのみ課金されます。これは他のCIサービスにはないユニークなものですね。また、privateリポジトリにも対応しています。

ビルド単価は$0.05 / 成功ビルドです。価格マトリックスには月300回の成功ビルドをした場合のコスト比較がされていますが、PhantomCIは$0.05 * 300 = $15となっています。

CircleCIは現在2コンテナ以上から課金で$50。とはいえ現在は1コンテナであればprivateリポジトリでもタダなので、平行ビルド無しでビルド詰まってもいいよって場合はCircleCIがコスト的には一番良いです。TravisCIはprivateリポジトリだと課金必要ですしね。

PhantomCIはあまりコストはかけたくないけど、ビルドを詰まらせたくないといった状況でコスパを発揮しそうです。あとは静かな時期は自然とコストが抑えられるのもメリットですね。

コンテナ型

PhantomCIも最近流行りのコンテナ型CIサービスであり、Dockerコンテナ上でビルドが行われます。Dockerがフィーチャーされてますが、CircleCIのようにコンテナ上でDockerをホスティングできるわけではないのであしからず。

サポート言語・フレームワーク

メジャーなところはサポートしていますね。意外にもio.jsに既に対応していて驚いたw(CircleCIでもまだ未サポートだったはず)

ミドルウェア

試してみる

サインアップして試してみましょう。Add Projectで適当にリポジトリを追加します。先日のJitPackの記事で使ったテストリポジトリを利用。

f:id:a-yamada:20150218235528p:plain

追加したプロジェクトを見てみると、phantom.ymlを作ってコミットしましょうみたいなメッセージが。CircleCIのように、プロジェクトの構成見て予期にはからったCIをしてくれるわけではないようです。 f:id:a-yamada:20150218235959p:plain

phantom.ymlのドキュメントがあるので、これを参考に作ってみます。とりあえずgradleでテストを実行するだけのもの。ではこれをコミットしてpushしてみます。

language: java_oraclejdk:7
cache: ~/.gradle
commands:
  - ./gradlew test

pushに反応してビルドが開始されました。

f:id:a-yamada:20150219001938p:plain

十数秒で終わりました。まあベンチマークとしては全然参考にならないと思いますが、それなりにサクサク動く印象。ちなみに、テストレポートをartifactsとして保存して閲覧できるような機能はまだ無いようですね。

無料利用枠

サインアップしてから最初の成功ビルド50回分は無料で利用できるようです。

f:id:a-yamada:20150219001948p:plain

今回ビルドに成功したことで、50回分あった無料利用枠が49回に減りました。

f:id:a-yamada:20150219002523p:plain

ビルドを失敗させるとどうでしょう。JUnitが失敗する状態でpushし、ビルドが失敗しても無料利用枠は減りませんでした。

f:id:a-yamada:20150219002939p:plain

感想

PhantomCIはまだまだド新興勢力なので機能的にはまだまだ劣るという印象です。とはいえ、テストを回すくらいのスコープであれば、十分使えるレベルではないでしょうか。

まあ今後の展開を注視したいというところなのですが、PhantomCIがどれくらい本気でやるのかっていう温度感は正直見えないですね。

あと気づいてしまったのは、失敗が課金されないのでテスト通ったあとにexit 1を返せば成功とみなされないってことですね(おい)