Technical debtProductivity Productivity Current Current Time Time Non managed debt Managed debt
eXtrem Programming On-site Customer Coding Metaphor Standards RefactoringLe client L’équipe Le code L’équipe Le client Acceptance Unit Tests Pair Release Tests Programming Planning Continuous Collective Integration Simple Design Ownership Sustainable Pace Small Releases
WHY CONTINUOUSLY INTEGRATE ?
If it’s harddo it more often
CONTINUOUS INTEGRATION PATTERNS
CI patterns• Commit more often• Every commit builds• Keep build fast• Everyone sees what’s happening
Commit more often• At least once a day• Small unit of work• Update first to commit cleanly
Every commit builds• It’s all about fast feedback• Small changes• Less to merge and/or fix
Keep build fast• If it breaks, you find out about while it’s still fresh• Keep up with frequent check-ins• When build isn’t fast enough :
Everyone sees what’s happening• Reduce time to fix• No excuse to check in on broken build• It’s not about blame, it’s about feedback
Now, what should we do ?• Write Unit tests • So we really get useful feedback• Update and commit frequently • So we don’t have to perform painful merges anymore• Act quickly upon feedback on Unit tests builds • So fixing is easy
Stop the line
Hudson / Jenkins dashboard
Hudson / Jenkins 2007 2010
The big picture of CI Test servers Binaries repository Continuous Developper Dashboard Integration Build tool SCM
Objectives!• Every project has a green (blue) build with compilation and unit tests.• Each broken build should be repaired in less than 15 minutes.