Continuous Integration for Ruby on Rails?

Jim Fiorato picture Jim Fiorato · Oct 21, 2008 · Viewed 40.7k times · Source

I've been searching around for a Continuous Integration solution for Ruby on Rails, but haven't been too pleased with the results. I came from a .NET shop that used CruiseControl.NET and was really spoiled with its ease of use and rich status/reporting.

Ideally I'm looking for:

  • The obvious Git/SVN and Test::Unit integration

  • Integration with Rake and/or Capistrano

  • A web interface showing the status of the build

  • Email notification of failed builds.

  • Desktop notification (potentially through Growl)

  • REST API for build statuses

  • Plugin framework for running other code analysis tools and reporting results in the UI

Answer

TALlama picture TALlama · Nov 8, 2011

I just went through the options here and thought I'd roll them up as of late 2011.

Integrity

After a near-death experience that left the still-linked-to website with outdated information and downed the demo site, this project has a spark of life again. But the documentation hasn't moved on, and lots and lots of the steps in the tutorial are just plain broken; I had to change references to gems, build some things out of band, and then I still couldn't get it working.

Cruise Control.rb

Dead simple: you just download it, run a command line to add your project (there is no UI for doing so), and run the Rails app. But there's no UI for editing your project, either, and there's no real integration with build artifacts aside from displaying links to them: you get no graphs of tests run, no trend lines, etc. I also had to adjust the routes.rb file to get the code linking working (the resources :projects line needs to move below all the other non-default routes).

TeamCity

This looks awesome, but the pay scale seems out of whack. 3 agents free and then when you're dependent you need to dole out hundreds of dollars. Personal Builds looks great, but don't have the budget.

Jenkins (née Hudson)

This is a Java stalwart and it is loaded up with a thousand options, so the UI is confusing and it's a chore to set up your projects. But once you set it up you get a whole lot of plugins that can pull from most anywhere, run most anything, and report most everything. The OS X Installer points Jenkins at /Users/Shared/Jenkins/Home but fails to create that directory or chown it to daemon (which is uses by default, and you should change to a new jenkins user so you can set up GitHub integration).

Others

I didn't really try these, but thought I'd mention why:

  • CI Joe wants to own the GitHub repo more than I want it, and its creators aren't even using it; they're on Jenkins.
  • Cerberus seems neatly small but doesn't have a UI and doesn't automatically publish build artifacts where others can see them.
  • BigTuna seems to be a CruiseControl.rb clone without the (already minimal) community support.
  • Bamboo looks really neat if you use JIRA and BitBucket, but we use neither. It does deploys but we already have those set up in Capistrano.

The Choice

We went with Jenkins, but I really wish one of the lighter-weight solutions had worked out.