Jenkins で Rails 3 プロジェクトのテスト結果とカバレッジをグラフ表示する

ある日突然「Rails 3 のプロジェクト作ったから Jenkins でテスト結果とカバレッジをいい感じで表示できるようにしておけよ」と言われて、一生懸命設定したときの内容をシェアする。

Scala (lift) 編は Jenkins で Scala (lift) プロジェクトのテスト結果とカバレッジをグラフ表示する - mallowlabsの備忘録 をご参照。

イメージ

環境

  • ruby 1.8.7
  • rubygems 1.5.0
  • rake 0.8.7
  • rails 3.0.3
  • ci_reporter 1.6.4
  • Jenkins 1.414
  • Jenkins ruby metrics plugin 1.5.0
  • Jenkins Rake plugin 1.7.6

まずはローカルで設定

要は rcovci_reporter を組み込んだ Rails 3 アプリケーションを作ればよい。

適当なブログアプリケーションを scaffold で作りながら説明を行う。

$ rails new blog

Gemfile に rspec-railsrcov、ci_reporter を追加する。

diff --git a/Gemfile b/Gemfile
index 1758ad6..3948308 100644
--- a/Gemfile
+++ b/Gemfile
@@ -26,6 +26,8 @@ gem 'sqlite3-ruby', :require => 'sqlite3'
 # Bundle gems for the local environment. Make sure to
 # put test-only gems in this group so their generators
 # and rake tasks are available in development mode:
-# group :development, :test do
-#   gem 'webrat'
-# end
+group :development, :test do
+  gem 'rspec-rails', '>= 2.3.0'
+  gem 'rcov'
+  gem 'ci_reporter'
+end

Rakefile に ci_reporter を追加する。

diff --git a/Rakefile b/Rakefile
index 52e48e6..4f57aa4 100644
--- a/Rakefile
+++ b/Rakefile
@@ -3,5 +3,6 @@
 
 require File.expand_path('../config/application', __FILE__)
 require 'rake'
+require 'ci/reporter/rake/rspec'
 
 Blog::Application.load_tasks

いろいろ生成する。

$ rails generate scaffold article body:string title:string
$ rails generate rspec:install
$ rake db:migrate
$ bundle install --path vendor/bundle

おまじないと一緒にテストを実行する。

$ rake ci:setup:rspec spec spec:rcov

spec/reports/*.xml と coverage/ が出来ていれば成功。

Jenkins の設定

ここまで出来ていればあとは簡単。

Rake の設定

テスト結果を数える spec とカバレッジを測るための spec:rcov を別々に呼んでいる。テストが2回走るのがちょっとダサい。

JUnit の設定

ci_reporter の設定が上手く行っていれば spec/reports/*.xmlsurefire 形式のテスト結果が生成される。

Rcov の設定

Rcovプラグインが頑張るので簡単。

まとめ

テスト件数とカバレッジを表示すると、テストを書くモチベーションになるのでオススメ。