Monday, February 13, 2012

Automation of code build and deployment (Continuous Integration & Deployment)

 I have been working on code build and deployment automation for a couple of days. Have gone through many tools that are good and can help in this case. Below is a table that that lists down the applications that help at different stages of the cycle. Below table shows movement of the code (source to binary form).


Tools/ Stage Version Contol Checkout Compile & build Run unit tests Configuration of deployment environments Deployment of build to various environments Deployment of DB changes to various environments
Tools Git Cruise Control Cruise Control (ANT, MAVEN, Make, Scripts, etc) Junit cfEngine Control Tier Liquibase
SVN Jenkins Jenkins (ANT, MAVEN, Make, Scripts, etc) Nunit Smartfrog Capistrano Scripts
CVS
Hudson(ANT, MAVEN, Make, Scripts, etc) Scripts Bcfg2 Fabric dbdeploy
Clearcase More tools


Smartfrog
More Tools
More Tools More unit testing frameworks



I was looking only at the open source tools, thus commercial tools are not found in this list. I found Jenkins to be amazingly simple and powerful. With a rich set of plugins and super easy interface and configuration its a breeze. In fact I was able to use it for the entire cycle right from checkout to deploy. It checks out the code, builds the war file (using ANT) transfers it to a windows or unix machine and deploy it.

While other tools might provide extra functionality but they will also add the overhead of managing multiple tools. Using a single tool for the entire cycle reduces the complexity of entire system.

Am currently exploring it for continuous integration and deployment for one of our legacy systems built on COBOL. Theoretically it would work. Just need to iron out a couple of issues on the legacy system front and it would be good to go.

Cruise control was a bit buggy (perhaps the windows build had an issue) and a lot more difficult to configure compared to Jenkins.

Also tried Beebox, but could not get to to work.

Did not try Luntbuild as the last release was somewhere in 2010. Not sure if it is still being maintained.

My verdict is Jenkins. The way to go...