楽にCIを実装したかったのでMagnumCIを使ってみた
最近社内のソースもみんなテストをしっかり実装してくれるようになっていて,嬉しい限りです.
@h3_potetoです.
Railsのアプリケーションがほとんどなので,テストはよくRSpecを使っています.
みんな慣れてきて,ちゃんとテストが通るソースを上げてくれるようになりました.
まぁ当たり前なんですけどね.
というわけで,そろそろCIを構築したくなったため,いい感じのCIサービスを探してみました.
ただし,インターファームの開発で使えるという条件は絶対に外せないので,以下の様な制約がかかります.
■ Gitlabに対応していること
■ プライベートリポジトリに対するビルドが行えること
■ 対応言語はRuby
■ お金はかかってもいい
候補だったもの
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側の設定
プロジェクトを作ります.
この段階で,テストビルドができるので,一応ビルドしてソースが取得できているのかどうかの確認くらいはしておいたほうがいいかもしれません.
WebHookの設定が出てくるので,次はGitlab側を設定します.
ちなみに,ビルドはWebHookを受け取るところにフックしているようで,その他の設定は見当たりませんでした.
Gitlab側の設定
ビルドしたいプロジェクトの設定を開いて,DeployKeysと,WebHooksの設定をします.
Gitlab側は,WebHookのイベントとして,
・Push
・Tag push
・Issues
・Merge Request
が対応しているので,とりあえずPushとMerge ReqeustでWebHook設定しました.
.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からも変更できます.
定義できるタイミングは,
・before_install
・install
・before_script
・script
・after_script
です.
あとは,これらのファイルを追加して,GitlabにPushすると,同時にMagnumCIがビルドを実行してくれるので,ログを見守りましょう.