最近話題のCI as a Serviceを導入すべく調査してみました。JenkinsさんもすごくいいのですがAWS smallインスタンスに乗せているとやっぱり本来の力を発揮できない感じがあるので。
CircleCIって以前は、一番安い契約だと1Private Repositoryしか扱えなくて使いづらそうな印象だったのですが、4月末頃にPrivate Repository数は無制限、同時実行ジョブ数で課金というPlanに変更になったようですね。
Simple and Transparent Pricing | The Circle Blog http://blog.circleci.com/simple-and-transparent-pricing/
自分の関わっているプロジェクトでは、
- リポジトリはそれぞれの役割ごとにいくつか分けている
- 開発者数は少ないのでコミット頻度はそんなに高くない
という状況だったのでまさに自分たちにマッチした変更で、早速試してみました。
CircleCI
長所
- それなりに日本でも使われていて情報が多い
- privateリポジトリをビルドするという点をメインに考えているUX
- 速い(AWS m1.smallでJenkinsを動かすよりも数倍速いです)
- 簡単。
- JenkinsのようにWeb UIから実行したいコマンド入れられるし、慣れたら"circle.yml"に入れて構成管理できる
- テストが落ちた時など、作ったイメージに30分ぐらいsshする機能がある。これで原因究明が捗る。
- サポート速い。うちのテスト動かないよーって問い合わせたら半日ぐらいで回答が来た。
短所
* sudoできない
2014/10/04追記
コメントで情報提供頂きました。sudo可能になったようです。
Continuous Integration and Deployment
CircleCIまとめ
長所凄いが短所が致命的になるケースは致命的。ちなみに、日本語が入ってないので日本通貨や日本語を使っているテストが落ちます。それを入れるためのapt-get
ができない、とそう言う感じです。
でもサポートに連絡すれば入れてもらえます。"ja-JP.utf8"が入ってないから入れてよ~ってメッセージ送ったら半日ぐらいで対応してくれました。でも入れるインスタンス間違えるというお茶目っぷりやらかしたので間違えてるぜって送ったらもう半日後に入りました。まあそんな感じのノリです。
wercker試した経緯
この時、サポートに連絡する前にapt-get
できねぇなぁってつぶやいてたら @chiastolite さんにwerckerどうよって言われたので試してみることにしました。
@ryonext werckerでワンチャン
— Hiroyuki Morita (@chiastolite) 2014, 5月 9
wercker
読み方は"ウェルカー"らしいです。
-- ここから追記 --
"ワーカー"らしいです。すみません。
@ijinさんにソース付きで情報提供頂きました、ありがとうございます!
@kawasy glad you asked! ;-) we pronounce it as "worker"
— wercker (@Wercker) 2014, 3月 27
-- ここまで追記 --
yokohama.rb のときに調査しようと思ったら、 @1syo さんがwerckerかなり触ってて、色々とヘルプ頂きました。感謝。
長所
- sudo可能
- コンテナや各実行コマンドがプラガブルになっており、個人の開発者が追加機能を投稿可能。これから伸びていく感じがすごい
- 実際、プラグイン一覧を見ていると @1syo さんのアイコンを見かけたりしました
- まだベータなので無料
短所
- まだ日本語の情報が少ない
- Google先生的な勢いでビルドプロジェクトを隙あらばpublicにしようとしてくる
- それなりにサイト自体が数分落ちる。Yokohama.rbのときに3時間ぐらい試してて2,3回落ちた
- ベータだからねえ
- DB等はlocalhostにはないので、接続先をlocalhostと書いているものは全て書き直しが必要。環境変数に接続先DBのIPアドレスが割り当てられている
- 実行コマンドは yml ファイルに書くが、ここが独自DSL入ってて覚えないといけない
- ちょっと詳しく書く
たとえば、bundle install
するなら
build: steps: - bundle-install
になる。CircleCIはコマンドをそのまんま書くので、
test: override: - bundle install
になる。ハイフンあるだけじゃねーか!ってツッコミ来そうですが、シェルから叩いて動くコマンドと同じで書き方で実行できるのが学習コスト少なくていいと思いますよ!(※ChefやAnsibleを否定しているわけじゃありません><) pythonでもpip install -r [pip freezeしたファイル]
が、pip-install
になってたりします。ファイル名は環境変数で設定していたやつを使う前提になってました。こういうところで自分の知ってる知識だけでいきなり使い始められないというのはちょっとつらいかなと。
なお、werckerも
script: code:
と書くことでそのままシェルコマンドが書けます。
werckerまとめ
CircleCIとはターゲットとしてるものが違ってて、ポストTravis的なものを目指しているのかなぁ、という印象。DBの接続情報など、重要な情報をマシンの環境変数で管理し、利用側は設定ファイルに環境変数を読み込むコードを書いて利用する、というのはherokuと同じスタイルだと思います。
まだ発展途上な感じでプラグインを書いてcontributeするみたいな活動も盛んなので、OSS活動したい人にはおすすめです。
全体のまとめとかCircleCIに至った経緯とか
会社で使うので、AWS small instance程度の料金であればCI用に出してもらえて、かつAWSより速くて快適なのでCircleCIにしました。日本語のテストが動かなくてapt-getもできない時点で厳しいかなぁ、と思ったんですが、サポートに連絡したらあっさり解決したので今後もよしなに使っていけそうな印象でした。
werckerはプラグインやDocker対応など今風の作りを取り入れてきているので、今後OSS界隈で伸びていきそうな雰囲気はすごくありますね。TravisでCI回している人は、こちらでも動かしてみて足りない機能を埋めるプラグインを投稿していくと面白いんじゃないでしょうか。
wercker、他にこういうとこがいいよ!みたいなツッコミあったらぜひください〜。