Jenkins is the industry-standard open source continuous integration tool.
The time I first heard about Jenkins was during the DevopsDays in Hamburg 2010. It was not known as Jenkins back then, but as Hudson. Jenkins was forked from Hudson early 2011.
Think of Jenkins as a cron daemon with a web interface and a massive repository of plugins.
How we use Jenkins
At Mintra Trainingportal we started using Jenkins about two years ago, and our infrastructure around Jenkins has evolved a lot.
Our initial Jenkins installation was very basic. We had a couple of jobs, which only task was to run integration tests on our project with Maven every 10th minute. It didn't seem obvious at first, but just getting Jenkins up and running was a huge step in our software development process. There was no automatic feedback to developers, there was no VCS hooks from our Subversion repository to automatically trigger tests, and there was no helper jobs for neither developers nor operations.
Time passses by and we learn
As time passed by we have learned a lot about Jenkins and continuous integration. We went from just a couple of tasks in Jenkins to 20-30 jobs with complicated logic. We moved from Subversion to Git and GitLab, and we have developed stable and solid workflows around Jenkins.
The Jenkins setup we run today consists of one Jenkins master and two slaves. The GitLab-installation has a web hook which notifies Jenkins on every commit to start a new cycle in the continuous integration and continuous deployment wave. We have different jobs for different branches and our developers gets instant feedback on e-mail if tests is not passing, the code is not able to build, or the final product is not able to deploy to a testing environment.
Not only for development
We also use Jenkins for operation tasks. Or, it is more correct to say that we use Jenkins for better cooperation between developers and operations. Some noteworthy tasks we are currently using Jenkins for:
- Generate thread dumps from the production environment and e-mail it to developers.
- Create developer-ready database-dumps with anonymised data.
- Run performance tests with JMeter.
- Deploy code to test, stage and production.
- Build artifacts and automatically publish to Nexus.
What other ways can Jenkins be used for? Let me know if you have any special and interesting use-cases in the comments below.