I spent time yesterday with Kohsuke Kawaguchi (@kohsukekawa) and many other Jenkins CI enthusiasts in NYC, discussing the state of Jenkins and observing how different teams are utilizing the tool. For those not in the know, Jenkins is a continuous integration software that allows you to handle build deployments and run tests against them. Seeing the other dev shops and the way they use Jenkins to the extent they do, it really still blows my mind. It almost feels like magic. I wanted to share a few gems of knowledge that I gleaned throughout the day.
1) Parallelize your tests.
This is something I have not done yet, but have been thinking about. I’m either waiting for PHPUnit 3.7 to introduce integrated parallelization, or I might bake my own solution into PHPUnit 3.6. To explain simply, parallelization cuts down test execution times dramatically. Your bottleneck would now be the slowest running individual test.
The more information you can provide to your developers, the more willing they will be to take charge of fixing bugs. The team mentality should be to fix bugs as soon as they’re found, no matter which team member intoduced the problem. When a dev team works together as a cohesive unit, the codebase will inherently be healthier.
3) True CI means that every commit is a potential release candidate.
Everytime you commit to the main branch, that tag should be ready for release. Period. You should never be committing broken code into the repository. Having tools like a try server or Jenkins merge validation will help prevent bugs from being introduced.
One of the more interesting takeaways from #JenkinsConf was watching the varied customizations that other dev shops were using. Jenkins really shines because it allows developers to create their own plugins. If there’s something unique that you want to execute in your build chain, there’s a plugin for that. And if you can’t find a plugin that already exists, it is extremely easy to roll your own plugin to fit your needs. For example, AtTask’s Joel Johnson (@_joelj) and Jesse Dowdle (@dowdlemj) created a plugin that allows you to group jobs by build tags. You can see their two plugins, DescriptionSetter and Pipeline Dashboard, at https://github.com/JoelJ
All in all, #JenkinsConf was very reassuring, considering that most of the information being expressed was knowledge that I’ve already learned, either from talking to other developers in the NYC area, or from reading other test automation blogs. I enjoyed the conference very much, and am looking forward to next year. Hopefully there will be another Jenkins meetup in NYC before then, because it’s always exciting to share different perspectives with other developers on how to tackle continuous integration.