FOSDEM '08 is a free and non-commercial event organised by the community, for the community. Its goal is to provide Free and Open Source developers a place to meet.


Interview: Kohsuke Kawaguchi

Kohsuke Kawaguchi will give a presentation about Hudson.

What's your goal for this talk?

I hope to get more adoption of Hudson, as well as perhaps solicit more contributions to the project, as I'm always looking for more committers.

Can you describe the benefits of continuous integration?

In my experience in deploying Hudson inside Sun for our group, I think the primary benefit is about moving mundane repetitive work from people to machines. For example, now that Hudson is running tests for our team, we don't need to run through testing before making a commit, which makes people more productive.

The fact that builds and tests are run continuously also improve the turn-around time for regression much shorter, and it also makes it easier to track down regressions to a small set of changes, reducing the effort it takes to find the cause of a regression.

Having a central server to do all these means that there's a single place for people to come to see all kinds of information, and this brings more transparency to projects, which is also a good thing.

Finally, Hudson has a lot of inter-project features, and when your big project consists of a set of smaller teams, these features reduce the communication necessary between teams, as well as keeping the overall project stable.

There are a lot more, but I need to keep some of this for my talk :-)

Of course. How does Hudson test itself? Is that actually easy to do?

Unfortunately, testing Hudson is very hard.

For one thing, testing web apps is hard. You can do some scripted tests, but it won't find broken layouts or typos, for example. Hudson also interfaces in a lot of native applications in different OSes with different set ups (imagine all kinds of different svn connection modes.)
The developer/tester resources that we have are limited, too, as with any open-source project, so our only hope is automated testing. But for all the reasons I mentioned above, it's hard.

Are there other continuous integration systems for Java, and how do they compare?

Yes. Since Java had pioneered this whole field of CI tools, there is plenty of competition. There's CruiseControl, which is still very famous, although I think it shows its age -- for example its design center is not around a web UI, and it doesn't have much inter-project handling at all.

There's also Apache Continuum. It's got the Apache brand, which is very strong, but I don't think it has been very active for the last few years.

Then there's commercial offerings like Atlassian Bamboo and JetBrains TeamCity. They are both from very reputable companies, but both charge a hefty license fee, and more importantly, they are not free as in speech, and as a result lack extensibility and the community.

There are probably a dozen or more smaller players in the field, and I think it's great that Java has such a vital community in this area.

How practical is it to integrate Hudson with existing version/release management systems?

This is one area where the community contributions really excel.
Initially Hudson only had CVS and Subversion support, but since then people from all over the world have developed plugins for Perforce, Accurev, ClearCase, and StarTeam, and I added one for Mercurial myself.
So this is one of the most tried and tested areas of Hudson plugin development, and I think it should be easy for anyone else to join us and write one for their favorite SCMs.

What about issue tracking tools?

Hudson has integration with many different test frameworks. This is particularly easy for Java-based ones, as there's a de-facto report format developed by Ant, and everyone seems to follow that. But internally Hudson is also flexible enough to add different reporting formats, or even different object models for tests. The community has developed a few plugin to bridge Hudson with test frameworks in other languages, like .NET.

There's issue tracker integration as well. Perhaps the most advanced is the JIRA integration plugin, which provides two-way links between JIRA and Hudson. There is a similar plugins for Trac, too. I have more ideas about better integration with the issue tracker, and so I'm hoping to find some time to work on it.

Flexibility and extensibility usually allows a system to be adapted to different needs. Which applications of Hudson have surprised you personally?

When I design an extensibility point, I usually have some idea about how it could be used, so in that sense what people are doing with it is usually within what I had imagined.

Perhaps one real pleasant surprise is a contribution from JBoss that implements a feature of "pushing" build records from one Hudson to another, so that you can run builds inside a firewall but publish a result outside. I tried to think about how I'd have done it by myself, and couldn't come up with a good approach, so it was really amazing for them to pull this off.

The name Hudson, is it inspired by the Hudson river?

I think of this program as my personal butler or secretary -- someone who's very organized and handles my administrative works. Since we the lowly engineers don't get one unlike managers, I started writing one. So I wanted a name that sounds like a butler, and since Jeeves was already used, I took Hudson.

We're looking forward to meet him!