if integration testing is important, integrate and test all the time
if short iterations are good, make the iterations really, really short (minutes and hours, not weeks and months)
Continuous Integration is born.
What is Continuous Integration?
Integrates source code and runs tests after each commit of code to the source repository.
Near-immediate feedback to the developer from the authoritative source, the system itself.
Nightly vs. Continuous Builds
Nightly builds generate deliverables. They result in something tangible: something for QA to test, something for product managers to review, and something to reassure team members that they are in fact building a product. Because of the external audience, the nightly build is a formal event, a mini-milestone that your team should hit without fail. Breaking the nightly build is something that generates blame and often consequences, such as becoming the build mother or being awarded a dunce cap.
Continuous Integration builds don’t need durable build products to be beneficial. They are a way for a developer to have a conversation with the system to gain reassurance that they have done their part.
Executes every “n” seconds or schedulable at particular times.
Check for modifications
The Build Loop CVS Build Artifacts Dir (Samba Share) SMTP Server 1. Bootstrap 2. Check for modifications 3. Get the revision log Cruise Control Your project’s Build file Ant, Maven, Make 2. Run Build 5. Publish Artifacts 6. Send Emails 1. Get the latest source 3. Tag source Cruise Control to project adapter. (build-project.xml) Ant script 4. Run Build
You can schedule continuous builds
You can schedule builds at particular times (nightly builds)
You can schedule builds at particular intervals (hourly, weekly)
You can omit certain times or days (no builds on Sunday)
You can run different targets for each iteration. (do a complete test every 3 rd run)
Gives the developer a chance to run something before a build.
Always runs, regardless of the existence of modifications
Check for Modifications
Checks for the existence of modifications, and retrieves the list of those modifications.