Continuous delivery with open source tools

4,128 views

Published on

These slides are about my personal experience from creating a continuous delivery process in the last 2 years.

The main focus lies in the tools I used and my experience with them.

Published in: Technology

Continuous delivery with open source tools

  1. 1. Continuous delivery with open source tools presented by Sebastian Helzle
  2. 2. Who am I? • Web developer since Geocities went popular (~1997) • Living in Karlsruhe, Germany since 2004 • Freelancer since 2007 and first TYPO3 project • Javascript enthusiast since 2008 • DevOps architect since 2012 • TYPO3 Neos core developer since 2013 • First time in Asia two weeks ago • Cook, hiker, reader, traveler, gamer for a long time
  3. 3. Overview • Motivation for continuous delivery • Steps in the delivery pipeline and • What each step means • The tools I use in each step • Tools for keeping the delivery environment running • Summary
  4. 4. Motivation • Deliver features, changes, fixes fast and reproducible • Everyone should be able to do it • Maintainable architecture • Create value for your customer
  5. 5. The delivery pipeline
  6. 6. Agile teams Code repository Feedback & Monitoring Automated builds Automatic tests Deployment Approval Production Reporting
  7. 7. Agile teams
  8. 8. Code repository • Centralized source code management • For reviewing and checking what’s going on in your codebase • My tool: Git & Gitlab! • Your private Github • Big community • Easy to setup and maintain • Supports teams
  9. 9. Continuous integration Server • Manages the whole CI process • My tool: Jenkins • Centralized application for running 
 all tasks in the process 
 (after commit) • Very customizable • Can run in a distributed environment • Has lots of plugins available
 including Chuck Norris plugin
  10. 10. Automated builds • Run after each commit • Report to the team if there are 
 problems • Give every build a unique ID which is traceable throughout the pipeline to production
  11. 11. Automated Tests • Assure the quality of your codebase • Will be triggered for every build • Provides reporting on code quality and other metrics • Some tests can also be run as monitoring for the production system • Promote builds which pass the tests • Inform the team when a tests fails and show the overall quality 
 over a timespan • My tools: • Selenium(2)! • PHPUnit, JUnit, PyUnit, QUnit, etc…
  12. 12. Deployment • Requires no manual steps (if possible) • Only deploy promoted builds • Promote builds on success • Configurations should be • in version control • easy to setup • Should be reproducible by everyone in your company • Requires good reporting, because errors will happen!
  13. 13. My primary deployment tool:
 TYPO3 Surf • Distributed as TYPO3 Flow package • Can be part of the project itself • PHP-based configuration (not necessarily a good thing) • Code is readable and can be extended easily • Rollbacks when any error happens while deploying • Keeps revisions on the target system • Deployment via rsync, packaging, Git • Run customized tasks at every deployment step • Alternatives: • Fabric - Python based tool for deployment and remote administration tasks
  14. 14. Approval • Smoke tests • My tools • Selenium(2)! • Curl & grep! • JMeter (Performance)
  15. 15. Tools for keeping the delivery environment running
  16. 16. Maintaining the pipeline • Use tools which can automate the setup of each step in the pipeline • • Install the applications • Configure the system environment • • Provision the (virtual) machines Create basic configurations for projects My tool: Chef! • Write cookbooks and recipes in ruby for 
 setting up reproducible environments • Large community & good support • Lots of free cookbooks you can use
  17. 17. Simulate the the pipeline • Try out new tools & updates • Check if the tools work together • Simulate deliveries • Break things and try again • My tool: Vagrant! • Check out the talk by Michael Knoll (Saturday):
 „Reproducible and portable work environments with Vagrant & Chef“
  18. 18. Summary • We want continuous delivery because • We know what we are delivering • We can deliver it fast • We can tackle the steps which create headaches • It reduces stress -> we have a better life
  19. 19. Problems you will face • The tools I presented aren’t trivial • • First steps will be hard -> don’t give up! Motivate your people to play around with the systems • • • Best learning effect from my experience Spreads the knowledge in your company Making your customer invest in the improvements of your pipeline
  20. 20. Links • gitlab.org - Gitlab • docs.seleniumhq.org - Selenium • jenkins-ci.org - Jenkins • http://www.getchef.com/chef/ - Chef • http://docs.fabfile.org/ - Fabric • https://qunitjs.com/ - QUnit • http://phpunit.de/ - PHPUnit • vagrantup.com - Vagrant
  21. 21. Contacting me • Twitter: @sebobo • By mail: sebastian@helzle.net • Skype: sebobo • Github: github.com/sebobo
  22. 22. Thank you! ! Any questions left?

×