楽にCIを実装したかったのでMagnumCIを使ってみた

最近社内のソースもみんなテストをしっかり実装してくれるようになっていて,嬉しい限りです.
@h3_potetoです.


Railsのアプリケーションがほとんどなので,テストはよくRSpecを使っています.
みんな慣れてきて,ちゃんとテストが通るソースを上げてくれるようになりました.

まぁ当たり前なんですけどね.



というわけで,そろそろCIを構築したくなったため,いい感じのCIサービスを探してみました.


ただし,インターファームの開発で使えるという条件は絶対に外せないので,以下の様な制約がかかります.

■ Gitlabに対応していること
■ プライベートリポジトリに対するビルドが行えること
■ 対応言語はRuby
■ お金はかかってもいい

候補にはいらないもの

以下のサービスは基本的にGithubでないと使えない,という理由のみで却下.

・TravisCI
・CircleCI

候補だったもの

Jenkins

老舗だしいいなぁとは思うわけなのですが,これってサービスではなくて自前でEC2インスタンスを用意して,CI用のサーバーをメンテナンスしなければならない.

これが非常に悩みどころで,「そこまでインフラ部分に工数をかけるのか」という問がつきまといます.


何はともあれ,OpscodeにてChefが公開されているので,OpsWorksに流し込んでみたわけですが……

opscode-cookbooks/jenkins · GitHub



うまくいかない.

これはなんか手こずりそうな上手く行かなさで,どうにもJenkinsがどうのというより,このChef自体を変えていかないといけない.


おそらく構築工数が結構かかりそう…….



あと,この手法のもう一つイヤなところとしては,CIのスピードはすべて自分で用意するEC2インスタンスのスペックに依存するってことですね.
そんなに手間かけて金かけてやるかなぁ……?


MagnumCIが大変便利


Magnum CI - Hosted Continuous Integration and Continuous Deployment Platform


以下の様な特徴があります.

Github,Gitlab,BitBucket,Beanstalk,その他カスタムのGitリポジトリに対応
■ 今のところ無料
■ HipChatやSlackとの連携


カスタムリポジトリに対応しているというのはすごく魅力的ですね.
適当なgitサーバーでもいけそう.

MagnumCI側の設定

プロジェクトを作ります.

f:id:h3poteto:20150107172414p:plain


この段階で,テストビルドができるので,一応ビルドしてソースが取得できているのかどうかの確認くらいはしておいたほうがいいかもしれません.

f:id:h3poteto:20150107172409p:plain

WebHookの設定が出てくるので,次はGitlab側を設定します.


ちなみに,ビルドはWebHookを受け取るところにフックしているようで,その他の設定は見当たりませんでした.

Gitlab側の設定

ビルドしたいプロジェクトの設定を開いて,DeployKeysと,WebHooksの設定をします.


Gitlab側は,WebHookのイベントとして,
・Push
・Tag push
・Issues
・Merge Request

が対応しているので,とりあえずPushとMerge ReqeustでWebHook設定しました.

f:id:h3poteto:20150107172417p:plain

.magnum.ymlの設定

一般的なRailsアプリケーションであれば,実はなにも設定しなくてもビルド,テストは行ってくれます.

$ bundle install --path .
$ bundle exec rake db:create
$ bundle exec rake db:schema:load
$ bundle exec rspec spec/

というのが自動実行されます.
Magnum CI - Hosted Continuous Integration Platform for Private Repositories



ここをカスタマイズしたい場合には,Railsアプリケーションのルートディレクトリに.magnum.ymlというファイルを作ります.

ここに以下のように記述することで,各種コマンドを上書きできます.

ruby: 2.0.0

install:
  - bundle install --path=vendor/bundle

before_script:
  - bundle exec rake db:create
  - bundle exec rake db:migrate RAILS_ENV=test

script:
  - bundle exec rspec spec/


ちなみにビルド時に実行するスクリプトについては,MagnumCIのプロジェクトの,Build Configurationからも変更できます.

f:id:h3poteto:20150107172421p:plain

定義できるタイミングは,

・before_install
・install
・before_script
・script
・after_script

です.

あとは,これらのファイルを追加して,GitlabにPushすると,同時にMagnumCIがビルドを実行してくれるので,ログを見守りましょう.




参考


プライベートリポジトリ無料のCIサービス「Magnum CI」を使ってみた - atskimura-memo