Jenkins : Configuring a Rails build

Deprecated

This information is outdated. Please lookup some tutorials on Google of you need help...

Guide to configuring a Rails project in Jenkins

I had some problems getting Jenkins to play along with the "Jenkins ruby metrics plugin", so I wrote this guide to document my setup. Hope it helps someone else out.

Based loosely on: http://www.juretta.com/log/2008/11/11/hudson_test_drive_part_1_rails/

Notice that Saikuro reports aren't currently working.

Prerequisites

Jenkins needs to have the following plugins installed: "Jenkins Ruby Plugin", "Jenkins ruby metrics plugin". Also, the build server needs Ruby and rubygems.

The build process will take care of installing any gems, as long as they are in "config/environment.rb".

Application

edit Rakefile and add the following:

require 'rubygems'
# Install:
#  sudo gem install ci_reporter
gem 'ci_reporter'
require 'ci/reporter/rake/test_unit' # use this if you're using Test::Unit

Install the rcov-plugin, by running:

./script/plugin install http://svn.codahale.com/rails_rcov

Add a dummy test case, to please rcov. Put the following in "test/unit/dummy_test.rb", "test/functional/dummy_test.rb" and "test/integration/dummy_test.rb":

# This is because rcov chokes, when there are no test cases found.
require 'test_helper'

class DummyTest < ActiveSupport::TestCase
  def test_truth
    assert true
  end
end

(Once you add real test cases to the project, you can remove these again)

Unless you require a MySql database, you can set the test database to sqlite. Otherwise, you'll have to create a test database somewhere, and put credentials in "database.yml". Remember to add sqlite as a dependency to "config/environment.rb", if you use it.

Since Rake can't always install missing gems through the "rake gems:install" task, we'll have to put the install the following plugin:

./script/plugin install http://github.com/troelskn/gemconf_plugin.git

SVN add new files and commit the changes.

Jenkins

Select "New Job"

Check option "Build a free-style software project" and enter a name. The name should be CamelCaseWithoutSpaces

Under "Source Code Management", select "SVN"

Enter:

Repository URL: http://blah/project/trunk
Local module directory (optional): trunk

Under "Build Triggers", select "Poll SCM"

Enter:

# Poll every 5 minutes
*/5 * * * *

Select "Add Build Step" -> "Execute shell"

Enter:

# enter application root
cd trunk
# install missing gems
script/install_gems
# set env vars
export GEM_PATH=/usr/local/lib/ruby/gems/1.8/gems
export CI_REPORTS=results
export RAILS_ENV=test
# Prepare for rcov
[ -d "coverage" ] && rm -rf coverage
mkdir coverage
# invoke rake
rake db:create db:migrate ci:setup:testunit test:test:rcov --trace RCOV_PARAMS="-I/usr/local/lib/ruby/gems/1.8/gems --aggregate coverage/aggregate.data"

(Note that if your GEM_PATH differs, you'll have to adjust it in the above)

If you'd prefer to only make coverage reports for unit tests, you can replace "test:test:rcov" with "test:units:rcov test"

Under "Post-build Actions", select "Publish JUnit test result report", "Publish Rcov report" and "Publish Rails stats report"

In "Test report XMLs", enter "trunk/results/*.xml"

In "Rcov report directory", enter "coverage/units"

Click "Build Now" to test the configuration.