One of the linchpins in the DevOps tools box is Jenkins. Just about everyone knows Jenkins. For those few not familiar with Jenkins, here is an excerpt from the “What is Jenkins” page:
What is Jenkins?
Jenkins is an award-winning application that monitors executions of repeated jobs, such as building a software project or jobs run by cron. Among those things, current Jenkins focuses on the following two jobs:
- Building/testing software projects continuously, just like CruiseControl or DamageControl. In a nutshell, Jenkins provides an easy-to-use so-called continuous integration system, making it easier for developers to integrate changes to the project, and making it easier for users to obtain a fresh build. The automated, continuous build increases the productivity.
- Monitoring executions of externally-run jobs, such as cron jobs and procmail jobs, even those that are run on a remote machine. For example, with cron, all you receive is regular e-mails that capture the output, and it is up to you to look at them diligently and notice when it broke. Jenkins keeps those outputs and makes it easy for you to notice when something is wrong.
Jenkins offers the following features:
- Easy installation: Just java -jar jenkins.war, or deploy it in a servlet container. No additional install, no database.
- Easy configuration: Jenkins can be configured entirely from its friendly web GUI with extensive on-the-fly error checks and inline help. There’s no need to tweak XML manually anymore, although if you’d like to do so, you can do that, too.
- Change set support: Jenkins can generate a list of changes made into the build from Subversion/CVS. This is also done in a fairly efficient fashion, to reduce the load on the repository.
- Permanent links: Jenkins gives you clean readable URLs for most of its pages, including some permalinks like “latest build”/”latest successful build”, so that they can be easily linked from elsewhere.
- RSS/E-mail/IM Integration: Monitor build results by RSS or e-mail to get real-time notifications on failures.
- After-the-fact tagging: Builds can be tagged long after builds are completed.
- JUnit/TestNG test reporting: JUnit test reports can be tabulated, summarized, and displayed with history information, such as when it started breaking, etc. History trend is plotted into a graph.
- Distributed builds: Jenkins can distribute build/test loads to multiple computers. This lets you get the most out of those idle workstations sitting beneath developers’ desks.
- File fingerprinting: Jenkins can keep track of which build produced which jars, and which build is using which version of jars, and so on. This works even for jars that are produced outside Jenkins, and is ideal for projects to track dependency.
- Plugin Support: Jenkins can be extended via 3rd party plugins. You can write plugins to make Jenkins support tools/processes that your team uses.
But beyond the wiki how did Jenkins become one of the most successful open source projects of all time? The answer to that has a lot to do with CloudBees, a little to do with Oracle and even more to do with an architecture that supports an ecosystem that has allowed almost a thousand plugins to be developed to the core project.
First let’s get the little do with Oracle out of the way. Jenkins was originally known as Hudson. Hudson was started by Sun Microsystems. When Oracle bought Sun it inherited a lot of open source projects (OpenOffice and Java among them). Many in the open source community questioned Oracle’s intentions regarding open source. It didn’t take long for a dispute to arise between many of the Hudson developers and Oracle. Oracle claimed they owned the term Hudson and that had an easy answer. There was a vote taken and Hudson became Jenkins. When Oracle objected, Jenkins became a fork of Hudson (or Hudson became a fork of Jenkins). Oracle still maintains Hudson, which is a shell compared to Jenkins.
In the meantime Sacha Labourey former CTO at JBoss, started CloudBees in 2010. This was after JBoss was acquired by Red Hat. CloudBees created a PaaS that was one of the first PaaS to support the entire application lifecycle from development to deployment. A key part of CloudBees offering was the Jenkins Continuous Integration (CI) engine. Labourey brought in Kohsuke Kawaguchi, a founder and key contributor to Jenkins. Along with Kawaguchi, several other key Jenkins contributors also came to CloudBees.
CloudBees and their employees contributed more than 80% of the code to Jenkins. Jenkins and the community that supports it is thriving. I had a chance to speak with Kawaguchi about this. He is very proud that there are over 1000 plugins now for Jenkins. I was blown away by a number of something like 500k downloads a month from the Jenkins website.
Of course a thriving open source community does not necessarily translate into a thriving commercial business. There have been many companies that never cracked the formula to monetize there open source success.
This is where CloudBees appears to be winning. I spoke to Kwaguchi about CloudBees commercial success. With offices around the world CloudBees has been able to translate an iconic open source project into a thriving business. They have a set of enterprise (ready pay for) plugins that enhance Jenkins in a number of ways. Additionally, the offer hosted versions of Jenkins, CI-a-a-S if you will. They call in Jenkins Operations Center. They also offer Dev@cloud, which is an umbrella for other services and software that enhance and make Jenkins easier to use across different platforms, with different languages and other options. Of course they offer support for your Jenkins installs as well.
All in all, Labourey and Kawaguchi have built a thriving commercial entity on top of Jenkins, while at the same time keeping Jenkins as a healthy, growing open source project. Kudos to them for a job well done.
That is not to say that there aren’t competitors to Jenkins. There are some open source projects and some commercial projects that claim to do CI better and faster. Of course many of them benefit from having Jenkins already there as a template and just improving incrementally on this already there. You can see a full list of Jenkins competitors at: https://www.g2crowd.com/products/jenkins/competitors/alternatives
While some of these competitors offer an improvement here or there, by and large Jenkins is still the standard against which they are measured. With CloudBees guiding and managing Jenkins, it will probably stay that way for the foreseeable future.