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

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

PhantomCI - Docker Based Continuous Integration

トップページに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でもまだ未サポートだったはず)

  • Ruby
  • PHP
  • Go
  • Node.js
  • **io.js**
  • Java
  • Python
ミドルウェア
  • MySQL
  • Postgresql
  • RabbitMQ
  • MongoDB
  • Memcached
  • Redis
  • Cassandra

試してみる

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

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

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

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

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

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

無料利用枠

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

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

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

感想

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

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

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