Best Practices

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

Automate Deployment

    - FTP EAR to server

    - Can be manually triggered

Anti-patterns

The Five-O'Clock Check-in

    - Don't check in code 30 mintues before you leave

    - Everyone checks in at the same time

Infrequence check-ins

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

Infrequent Builds

    - 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