Continuous Delivery Alejandro Ruiz
True reality How the customer explained it How the project leader understood it How the analyst designed it How the programmer wrote it What the customer really needed 2
Principles of the Agile Manifesto Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. http://agilemanifesto.org/principles.html 3
Traditional vs Agile 4
Continuous Delivery Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time. Martin Fowler 5
Continuous Delivery Deliver new versions of software to production Deliver software faster and more frequently Quick response to new requirements/feedback Easy way to provide a release of any version on demand Increase software quality 6
Use case: HP FutureSmart FW Cost out of control Long development & test cycles Manual deployment Manual QA Difficult to be competitive 7
Development improvements 8
Build improvements 9
What do we need? Build a culture to support continuous delivery Automation and scripting Automated testing 10
Code Versioning CVS Anything in the master branch is deployable Organize source code changes by task-oriented units of work Commit often, at least once a day Keep everything in source control 11
Build Process Identify and define the phases to create a deliverable Identify dependencies Common phases: Version control Static Analysis Compile Packaging Unit test Code coverage Deployment Ident 12
Build Automation All build/deployment processes are written in a script. Command line execution Push-button deployments MSBuild 13
Test Automation Automate as much of your testing as possible Early and often feedback Mitigating error prone human behavior Save Time & Money vs. Manual Testing 14
Test levels Integration Pre commit testing Commit testing Stability Smoke test BVT Acceptance Regression Full regression of automated test 15
Continuous Integration Reduce the time to integrate and detect issues as soon as possible Validate code after a change in the source code Tracking of Software quality metrics 16
Continuous Integration flow 17
Continuous Integration tools MSBuild Cobertura 18
Continuous Integration tools Source Code Management Git, Mercurial, CVS, Subversion, TFS Build Tools Gradle, Maven, Ant, MSBuild, Rake Testing JUnit, Nunit, MSTest Repository Manager Software Quality tools Continuous Integration Servers Artifactory, Nexus, Archiva Sonar, Cobertura, FindBugs Jenkins/Hudson, TeamCity, Bamboo, Cruise 19
Continuous Deployment Pipeline Commit Integration Unit testing Code Analysis Packaging Acceptance Smoke test Acceptance test Regression Test Install Package in sandboxes Configure sandboxes Run Regression test Release Promote as a Release Deploy on production UAT Install Package in UAT environment Promote as Release candidate Performance Test Install Package in sandboxes Configure sandboxes Run Performance test 20
Principles of Continuous Delivery The process for releasing/deploying software MUST be repeatable and reliable Automate everything! If something is difficult or painful, do it more often. Keep everything in source control Done means released Build quality in! Team commitment Improve continuously. 21
Conclusion Evolution not revolution Keep rethinking and improving Team commitment 22
Q&A 23
Thanks 24
25