Continuous Integration is a practice in which the team checks in and builds the software system as often as possible. This keeps all the programmers on the same page, and enables very rapid progress. Perhaps surprisingly, integrating more frequently tends to eliminate integration problems that plague teams who integrate less often.
True Continuous Integration occurs when developers use the practice in concert with Test-Driven Development (TDD), integrating their work immediately after writing a unit test and just enough code to make the test pass. The cycle looks like this:
This leads to developers integrating very small changes very frequently – on the order of 5-10 minutes. This practice all but eliminates the issues such as complex merges with collisions that teams encounter when they integrate even once per day and certainly when they delay integration for longer periods of time.
There are several tools that assist in Continuous Integration:
Each of these tools can be configured to poll your code repository for changes, and automatically start the build process when a change is detected. They can also execute unit and accpetance tests, and report the results.
There is also the belief that a tool is overkill for implementing Continuous Integration. James Shore has published a Continuous Integration Checklist, that thoroughly describes the CI process without the use of special tool (excepting a rubber chicken!).