
Continuous Integration is a great thing. Allows you to
monitor your project state on a commit-by-commit basis. Every build failure is monitored easily.
If you connect your unit and integration tests properly also tell your
runtime properties of the project, for example:
- Does it boot properly?
- Doesn't it crash in 1st 5 minutes?
- Are all unit tests 100% green?
- Are all static tests (think: FindBugs, lclint, pylint, ...) free of selected defect types?
The implementation:
- you encourage your team to push changes frequently to main development branch (having high quality unit testing suite you can even skip topic branches policy)
- you setup some kind of Continuous Integration tool to scan all the repositories and detect new changes automatically
- for each such change new build is started and tests are carries out automatically
- all the build artefacts (including tests outcomes) are collected
- the teams are notified by e-mail about build/test failures in order to allow them to carry out fixes quickly
OK, so we have outlined the plan above. Let's
dig into details for every step. I'll use the most popular tool used named Hudson/Jenkins as implementation tool (there are two projects, but they're, actually, the same tool).
I'm going to address all the features I expect from continuous integration system (based on my current experience with other CI systems).