Maintain a Single Source Repository
- put everything needed for the build in the repository
Automate the Build
- get a running system out of one click
- only build a part of the system that changed
Make Your Build Self-Testing
- include automated tests in the build process (Unit and integration)
Everyone Commits To the Mainline Every Day
- Integration allows developers to tell other developers about the changes they have made.
Frequent communication allows people to know quickly as changes develop.
Every Commit Should Build the Mainline on an Integration Machine
- Every time a commit against the repository finishes the server automatically checks
out the sources onto the integration machine, initiates a build, and notifies the
committer of the result of the build. The committer isn't done until a notification has been received.
- Many organizations do regular builds on a timed schedule, such as every night.
This is not the same thing as a continuous build and isn't enough for continuous
integration. The whole point of continuous integration is to find problems as soon
as you can.
Keep the Build Fast
- ten minute build is reasonable
- fact multiple builds done in sequence. (commit build, IT/code coverage build,...)
Make it Easy for Anyone to Get the Latest Executable
- Have the executable easily accessible
Everyone can see what's happening
- continuous integration is all about the communication
- for the good builds as well as the bad
- easily see the health of the mainline
- emails for bad builds
- FTP EAR to server
- Can be manually triggered
The Five-O'Clock Check-in
- Don't check in code 30 mintues before you leave
- Everyone checks in at the same time
Builds without quality tests
- may think everything is fine
Broken builds exist for long periods of time
Impeding action with minimal feedback - don't know who broke what
The cold shoulder of spam feedback - too many status updates
Bloated builds delay rapid feedback
- only building at night
- no value builds occur
- builds too many changes at once
But, it works on my machine!
- build should be repeatable regardless of location
Clean up your environment
- non-commit builds should start with a fresh copy of the source files and dependencies
- old build junk can affect results