Hudson is a continuous integration server for Java development.
The development of this platform started with Hudson while Jenkins was forked from Hudson when Sun was acquired by Oracle who aimed to develop a commercial version of the software. Since the fork, Jenkins has grown to be much more than a continuous integration solution
They both run inside servelet containers on Java application servers allowing for easy integration into your existing workflow.
Our top four reasons for using Hudson and Jenkins:
At IDRsolutions, Hudson and Jenkins are a key part of our Java development process. We make use of both servers and are gradually moving across all our instances to Jenkins. Here are some of the reason make use of these platforms. For simplicity, we’ll refer to both as Jenkins.
1. Continuous Integration
At its core, Jenkins is a continuous integration server. Continuous integration is a development approach that implements a “develop > test > deploy” loop meaning any changes to the software are automatically tested before deployment. Furthermore, upon test failure, the changes will not be pushed onto the main platform. As a result, developers can make changes without worrying about breaking main builds.
Jenkins support Maven, Gradle and Ant to suit your build needs. At IDRsolutions, we use Maven and ensure our test process is efficiently implemented. Firstly static analysis via PMD, FindBugs and CheckStyle for finding quick bugs, followed by our JUnit test suite for each module and finally producing Javadocs.
2. Scheduling
Continuous integration is not just for executing tasks based on user interaction. Your projects may implement time-sensitive tasks or cron jobs. On Jenkins, you can create jobs and schedule them to run at certain times of day or in intervals. As such, we execute performance tests once a day, testing across different Java versions, roll-out daily builds and so on.
3. Open-source code and extensibility
Jenkins is the leading open-source automation server with over 1400 plugins for development automation. With a strong community, the project is ever-evolving with new features, plugins and an active mailing list. You and others can identify your pain points and either find a plugin to suit, be able to make a suggestion on the mailing list, or dive right in and develop your own.
4. Customisation and scripting
Every team is different and has different requirements for their workflow. There might be occasions where there is no plugin to suit that one task you wish you could avoid. To solve this, key part of any automation is scripting.
In addition to the plugins, Jenkins supports various scripting languages allowing for the execution of tasks specific to your needs. Creating python scripts to automate repetitive tasks on your workstation is great. Using scripts as part of continuous integration is even better.
Furthermore, if you feel that task is more universal, consider creating a plugin to meet your needs and help others with similar pain points.
Summary
We use Jenkins to enforce continuous integration and unit testing to improve our Java development. The automation server comes with many features and is constantly improving. Due to this, it is extremely extensible, customisable and able to automate any server-based tasks from even a single instance.
Lastly, do you use Hudson and/or Jenkins? What are your favourite plugins or features? Let us know by either leaving a comment below or contacting us directly.