Saturday, January 14, 2012

Continuous Integration( Part One) :Build server

why we need a build server ? 

Before moving in to the today's topic I would like to explains the typical scenario of the software development with out using continuous integration. Suppose that your project team is using a source controller where you save all source files in a shared location for the collaborative development process. How it works is simply a developer implements a feature of your product and then do the testing on developer's environment. If the testing  is successful he/she push the new changes in to the source controller. Following diagram explains it briefly.
Here the developer must do the modification such that the latest version is build on every other developers environments. Here what I am trying to notice is that it is not sufficient the latest version build successful in one machine.Lets say another developer get the latest update and it is not working in his machine.Reason is there may be some configuration which you forget to commit and it leads to errors in the latest version of the software in other's machines. Those are things that the software engineers had to spend much time to fix which reduce the productivity of your team.

Solution for this issue is to introduce a third party built environment which is isolated from developers' specific setting. It should be an environment which user its own configurations (eg : database configurations)


Simple you can configure your build server such that it runs in an isolated environment and runs all unit testing and UI testing(Selenium). If it fails also build server can configure such that it sends a mail to developers with the build error message.

Following are few of available build servers in today's software industry.
http://hudson-ci.org/
http://jenkins-ci.org/
In my next blog posts I will use jenkins server for explanations.

Followings are the basic tasks which we expect from the build server side to make a end to end Continuous Integration.

  • Get the latest updates from source controller and run all unit tests/UI tests(Selenium)
  • If the tests are successful then automate the deployment process. There can be multiple deployments take place.Eg: Live deployment,Production deployment
  • Create a package which can deploy on your web container and save it with the version.Simple its like keeping working copies of software packages for each working changes.

1 comment: