Continuous integration is the key!

Continuous integration (CI) is a key component of any successful software development team - not just an agile team. Doing it right will bring the following benefits to your team:

  • Provide automated builds of software for testers to pick up. 
  • A common, repeatable platform to run tests (unit, integration, automated functional and performance tests).
  • A place to run code quality tools (SonarQube, FxCop, StyleCop, JSHint etc)
  • A place to create production build installers. 
There are various great tools for setting up continuous integration and you should spend time evaluating what will be best for your project. My personal favorites are: 
It is imperative that an agile team devotes time early in their project to get their continuous integration system up and running early (sprint 1 or 2) to ensure they have a solid platform to run on. Ideally your continuous integration will run on every commit into your source control system so that the team gets immediate feedback - have the changes compiled, have the tests run, is the code quality good. In the past in teams I have configured our continuous integration system to play a siren out loud in the office if the build has broken. The public nature of a central build location ensures extra care is taken by each team member when submitting their changes. 

For continuous integration you will need the following infrastructure at a minimum:
  • A server for builds, running the tests etc. 
  • A source control system (e.g. GIT, SVN, CVS)
For larger projects you may scale this up to have multiple agents running builds and tests. 

A common mistake teams make when creating their CI system is to not share knowledge of its workings with enough team members. Ideally everyone needs to know how it works - from developers to testers. These things need maintenance now and again and you want to spread the load, and have multiple people who can pick up the task. 


Once your continuous integration environment is setup and successful, you then need to look at automatic deployment - I'll write a future blog for this. Automated or continuous deployment is the next logical extension of your CI environment where you automatically build a new version of the system for test purposes perhaps or even automatically updating your production environment depending on your project.  Again with a little up front effort, the long term benefits can be huge!

Comments

Popular posts from this blog

Android: Programmatically get list of installed apps on an Android device

Integrating Google Analytics into existing Android app

Update eclipse Android Development Toolkit to version 23.0.0