Continuous delivery with open source tools

Post on 06-May-2015

1.915 views 3 download

description

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.

Transcript of Continuous delivery with open source tools

Continuous delivery with open source tools

presented by Sebastian Helzle

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

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

Motivation• Deliver features,

changes, fixes fast and reproducible

• Everyone should be able to do it

• Maintainable architecture

• Create value for your customer

The delivery pipeline

Code repository

Automated builds

Automatic tests

Deployment

Production

Agile teams

Reporting

Approval

Feedback & Monitoring

Agile teams

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

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

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

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…

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!

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

Approval• Smoke tests

• My tools

• Selenium(2)!

• Curl & grep!

• JMeter (Performance)

Tools for keeping the delivery environment

running

Maintaining the pipeline• Use tools which can automate the setup of each step in the pipeline

• Provision the (virtual) machines

• Install the applications

• Configure the system environment

• 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

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“

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

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

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

Contacting me

• Twitter: @sebobo

• By mail: sebastian@helzle.net

• Skype: sebobo

• Github: github.com/sebobo

Thank you! !

Any questions left?