for 17 years • Computer Science graduate from Hull (REPRESENT!) • ZX Spectrum → Delphi (Computer Shopper) → tiny bit of Java → C# in 2001 (Visual Studio .NET BETA) → obsessed with Node.js EXPERIENCE OF CI & CD • Esendex practice Continuous Integration, working towards (and almost at) Continuous Delivery for all products • Personally I use CI and CD in almost all projects I write in my spare time • Very passionate about automated testing, come chat if you would like to discuss it AND I LOVE ARNOLD SCHWARZENEGGER
are essential, but... Keep the MAINLINE (or MASTER) up to date by minimising the use of branches. BASICALLY: Divide features into small chunks to help integrate and deliver more frequently
Committing broken code makes it hard to INTEGRATE. Integration machines are servers designated for BUILDING your code. For example: Jenkins BUILD SLAVE or GO AGENT But MORE ON Integration Environments LATER
working on FEATURES while your last commit builds Fix problems immediately. Use tools: GIT STASH or TFS SHELVING to quickly jump back and fix your code if you need to.
COLOURS to help display state. At Esendex we use CAT GIFS and GUIDS to represent GREEN BUILDS Decreases RESPONSE TIME and EMPOWERS developers the OWNERSHIP of code changes. But, if the build is broken: Start a WITCH HUNT Ask WHO BROKE THE BUILD? Be inventive, use a NERF GUN. Shoot the COWBOY
Conversation with Martin Fowler, Part III by Bill Venners, November 18, 2002. Release LESS BUGS to PRODUCTION Less CUSTOMER reported bugs, more INTERNALLY CAUGHT bugs Avoid LONG DEBUGGING SESSIONS.
ACCEPTANCE for feature acceptance testing INTEGRATION for external integration testing - e.g. MAIL SERVER or DATABASE REGRESSION TESTS with quote on next slide
is not blocked by UserAcceptTests or CAPACITY TESTS It is already VERIFIED by a STRONG INTEGRATION suite and AUTOMATED TESTS When working in small chunks, HIDE new functionality until it is finished Make all changes INCREMENTALLY Get FAST USER FEEDBACK and ADAPT to problems QUICKLY Not to be confused with CONTINUOUS DEPLOYMENT which is RELEASE EVERY CHANGE.
with ONE CLICK Remove ALL UNKNOWNS from the deploy step to MINIMISE RISK Support the deployment process with a WELL DEFINED RELEASE STRATEGY to handle failures DEPLOYMENT is everyone’s responsibility, everybody should know what happens and how to fix it
• Appveyor • Semaphore App • BuildBox • CircleCI • MagnumCI • … LOADS • … even AZURE can build, test and deploy Almost ALL able to BUILD and DEPLOY Usually OPERATING SYSTEM SPECIFIC e.g. Linux only or Windows only With so many available, you can get started NOW applying a CI and CD process to your own projects