The JRuby Blog

The Ruby Programming Language on the JVM

JRuby CI: Keeping it Real

Published by Charles Oliver Nutter on

Building a Ruby implementation is a long and challenging project. There’s thousands of
tests you need to pass, tens of thousands of libraries you need to run, and lots of
edge cases you need to discover and fix over time. Perhaps even more challenging is
keeping your Ruby implementation working from release to release, commit to commit.
Continuous integration is an absolute necessity.

JRuby has had a CI server for at least the past five years, running hand-rolled
options at first, and later to Jenkins (nee Hudson) where we will stay for the
foreseeable future. This post will help you understand how much effort we put into
remaining compatible and stable over time, and how you can track JRuby’s dev process
from a CI perspective.

The Server

As mentioned above, we run Jenkins for our CI server. The
machine runs on EC2 on a modest-sized instance funded by Engine Yard. There are dozens
of builds running on that machine, and it’s busy almost 24 hours a day.

There are several dimensions across which we test JRuby:

It’s probably safe to say JRuby runs more tests in more combinations than any other Ruby
implementation, including MRI itself. What do the tests include?

The Suite

JRuby’s test suite obviously includes our own JRuby-specific tests, but over time it has grown
to include several other suites.

All six of these test groups are run as part of the “test-extended” and “test-all” targets,
adding up to literally millions of assertions.

The Snapshots

In order to aid people testing JRuby, and to give people easier access to the latest features
on master and fixes on our release branches, we publish nightly snapshots to

Here you will find 1.7.x and 1.6.x builds, or if you
prefer to use our rolling development aliases,
master and release builds.

Your Turn

There’s a lot to track on our CI server, and we’d love your help in keeping builds green or
fixing builds that are red. We’re also looking to add other key libraries to our CI server,
to help ensure we’re maintaining a high level of compatibility. If you think you can help,
post a message to the JRuby dev list, or ping @jruby on Twitter!