[This is not an April Fool’s joke. I always publish my posts on Tuesday mornings, and this week’s just happens to be a release announcement. I considered delaying for a day, but in the end, decided to keep up my regular posting schedule.]
I’m mostly happy with the transition, but as we add more and more builds, using the Jenkins web interface to configure them gets tedious. The one main advantage that CruiseControl has is that it provides great tools for removing duplication from the build instructions.
With Jenkins, I haven’t found a good built-in way of managing the
duplication between the various jobs. When we want to change a
setting across all of our builds, we have to go through a tedious
manual edit process with the web interface. It is possible to go
under the hood and change the
config.xml files, but this is also
JJB allows us to specify our jobs in YAML and then run a command-line tool to update our Jenkins server with the new and/or modified job definitions. Having all of our jobs defined in one place in a clean format like YAML is an improvement, but still doesn’t directly deal with the duplication problem.
Fortunately, JJB has some abstraction capabilities that help to remove some of the duplication. The three main tools it provides are defaults, templates, and macros. Depending on your needs, these tools might be all you need to tame your Jenkins job definitions. For us, it was an improvement, but still not enough to support the different kinds of jobs we run. I spent some time thinking through some ways of improving JJB to meet our needs, but wasn’t able to come up with anything workable.
Jujube allows for even more abstraction capabilities than JJB itself, and I’ve found it able to solve all of the problems I had trying to remove duplication from my job definitions.
I consider Jujube’s API relatively stable at this point, but it is still incomplete. I’ve added support for the JJB components that I’ve needed up to this point, but that’s only a fraction of what JJB provides. I plan to add support for more components as I have time, and I’m more than open to requests for specific components to help me prioritize. I also welcome pull requests that add support for other components.
I am using Jujube to manage almost all of our Jenkins jobs in production today. The remaining jobs need some additional support in JJB before we can convert them to Jujube/JJB.
If you work with Jenkins, then I highly recommend looking at Jenkins Job Builder. It may be all you need to get your job definitions under control. If it isn’t quite enough, then take a look at Jujube and let me know how it works for you.