月曜日までに考えておきます

ITネタとゲームネタ中心に興味のあること色々書きます。

CircleCI導入したのでwerckerとの比較も含めてまとめ

最近話題の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

https://circleci.com/

長所

  • それなりに日本でも使われていて情報が多い
  • 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どうよって言われたので試してみることにしました。

wercker

http://wercker.com/

読み方は"ウェルカー"らしいです。

-- ここから追記 --

"ワーカー"らしいです。すみません。

@ijinさんにソース付きで情報提供頂きました、ありがとうございます!

-- ここまで追記 --

yokohama.rb のときに調査しようと思ったら、 @1syo さんがwerckerかなり触ってて、色々とヘルプ頂きました。感謝。

長所

  • sudo可能
  • コンテナや各実行コマンドがプラガブルになっており、個人の開発者が追加機能を投稿可能。これから伸びていく感じがすごい
    • 実際、プラグイン一覧を見ていると @1syo さんのアイコンを見かけたりしました
  • まだベータなので無料

短所

  • まだ日本語の情報が少ない
  • Google先生的な勢いでビルドプロジェクトを隙あらばpublicにしようとしてくる
    • 隙あらば、というと語弊があるけどpublicにする導線がそれなりに押しそうな場所にある
    • 基本はOSSを想定してる感じなのかな?
    • Google先生はpublicにするというよりは、「いつからPrivateだと錯覚していた?」な能力なのでまたちょっと格が違うかも
  • それなりにサイト自体が数分落ちる。Yokohama.rbのときに3時間ぐらい試してて2,3回落ちた
    • ベータだからねえ
  • DB等はlocalhostにはないので、接続先をlocalhostと書いているものは全て書き直しが必要。環境変数に接続先DBのIPアドレスが割り当てられている
    • herokuみたいな感じですね
    • デプロイ先をherokuと考えているならこれは短所にならないはず
    • Railsならその辺をよしなに解決してくれるプラグインもありました
      • ごめん、俺が調べてたのDjangoなんだ・・・
  • 実行コマンドは 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、他にこういうとこがいいよ!みたいなツッコミあったらぜひください〜。