Top 10 features of Hudson
(aka Mr. Hudson) and I attended href="http://javasymposium.techtarget.com/lasvegas/index.html">The
Server Side Java Symposium, Las Vegas in href="http://blogs.sun.com/arungupta/entry/slides_demos_for_rails_glassfish">Mar
2008. In one of the evenings we spent togehter, I decided to
pick Kohsuke's brain on top 10 features of href="http://hudson.dev.java.net/">Hudson. My
were lost but luckily I found them so this article is slightly dated
but most of the content is still very much valid. Newer features have
been added since then anyway.
Here you go ...
- Ease of
installation & use - Hudson is downloaded as a href="https://hudson.dev.java.net/servlets/ProjectDocumentList?folderID=2761">single
WAR and run just using "java -jar hudson.war" - no additional
configuration or container. It can also be started by clicking on href="https://hudson.dev.java.net/hudson.jnlp">this link.
There has been emphasis on a single web app with no need to run a
Continuous Integration (CI) server or client. If started using "java
-jar hudson.war", then the default page looks like:
More details about ease of installation & use are available in href="http://hudson.gotdns.com/wiki/display/HUDSON/Installation+and+Execution">Hudson
extensive ecosystem of href="http://hudson.gotdns.com/wiki/display/HUDSON/Plugins">plugins
- You can easily write plugins to support tools/processes in your team.
And after you contribute, they can be used by others as well.
Center - for finding and installing plugins
- Source Code Control Plugins:
Source Safe, href="http://hudson.gotdns.com/wiki/display/HUDSON/Git+Plugin">Git,
- Most of the plugins are small and can be created in spare
support for generating plugin templates. Read more about
developing plugins in href="http://hudson.gotdns.com/wiki/display/HUDSON/Extend+Hudson">Extend
build support - This lets you use those empty sitting
machines in a master/slave configuration and churn out the builds.
Hudson "baby sits" the slave and performs some non-trivial work to
monitor it such as clock synchronization, disk space monitoring and
restarting the slave if it gets disconnected.
- Inter team
support - Multiple teams working together with an
inter-dependency require href="http://hudson.gotdns.com/wiki/display/HUDSON/Terminology">downstream
projects to be automatically built. A complete chain of projects with
upstream/downstream can be easily configured. Such projects also need
to keep track of which version of this is used by which version of
that. Hudson uses href="http://hudson.gotdns.com/wiki/display/HUDSON/Fingerprint">Finger
printing to simplify this.
- Open source
- Hudson is fully open-sourced under href="http://www.opensource.org/licenses/mit-license.php"> style="text-decoration: underline;">the MIT
- 226th release was released on 6/17 and never lost data compatbility
even once. The migration from older to newer version is seamless, it's
basically just redeploying the WAR and there is no extra configuration
tools outside Hudson - This is possible because of
programmable control interface. Some of the examples are:
Tracker & href="http://hudson.gotdns.com/wiki/display/HUDSON/Hudson+Tray+Application">Tray
Application - Small application that sits in your task tray
and monitor Hudson builds
plugin - Creates links from Hudson projects to href="http://trac.edgewall.com/">Trac instances.
Build Monitor plugin - Displays Hudson orbs on Firefox status
bar panel to indicate the build status
support - Hudson provides easily readable URLs for most of
the pages such as "last successful build", "promoted build". These URLs
can be used linked from anywhere.
- Localization is available in English, Japanese, Gemany, French,
Turkish, Brazilian, Portugese, Russian. You can easily create your own
localization bundle by following href="http://hudson.gotdns.com/wiki/display/HUDSON/Internationalization">these
instructions. There is even an href="http://hudson.gotdns.com/wiki/display/HUDSON/Internationalization#Internationalization-StaplerpluginforIntelliJIDEA">IntelliJ
plugin to internationalize existing code.
blocks - Hudson builds on general-purpose building blocks
which can be used for other projects as well:
- URL binding of domain objects
- JSON & XML generation
- Much of the implementation of remoting is in Stapler -
take POJO and convert into XML
- IntelliJ plugin for Stapler
- View tier is pluggable - Hudson uses Jelly.
- small runtime library to choose the locale with
IDE plugin for i18n
So you still think you need another Continuous Integration tool ?