!

Continuous Deployment
!
!
!

Me: Hajo Eichler
!
!

‣ founded 2006
‣ Munich & Berlin
‣ 40 people
‣ Cloud eCommerce Software
provider
‣ company behind SPHERE.IO, first
eCommerce PaaS

!

!
‣ Head Product Development
‣ DevQaOps

!
!
!
!

‣ commercetools.com

‣ hajo@commercetools.com

‣ @commercetools

‣ github.com/hajoeichler

‣ @sphereio
SPHERE.IO
!

‣ Single Source Commerce
‣ Open API for products, customer, cards, orders, tax ...
‣ SDK, templates, CLI, connectors, examples, plugin-ins, etc

as Open Source
SPHERE API
JAVA

NODE.JS
IOS

RUBY

📱
PHP

ANDROID

SPHERE API
App Stack

Ops Stack

!

!

‣ Scala

‣ Puppet

‣ Play 2

‣ mcollective

‣ REST/JSON

‣ hiera/raziel

‣ Netty

‣ Ruby

‣ Mongo

‣ nginx

‣ ElasticSearch

‣ Rackspace
Today’s challenge...

Code

Server
... in practice
!

several	

environment
LB

different	

languages

config
sensitive	

data

fast	

iterations

LB

multiple	

server
Packaging
!

‣ One system to rule them all (OS, services and apps)
‣ Yum or apt update, rollback and handle config files
‣ fpm is you friend

Repository
!

‣ Repository categories for stages
‣ Using S3 for hosting
‣ Implemented with s3cmd
‣ Access controlled
System automation - bootstrapping
!

‣ Running on Rackspace

bootstrap with http://fog.io
‣ We build nodes from scratch
based on standard distro image
‣ Automated DNS management
using AWS Route53
System automation - configuration
automation - provisioning
!
hiera packed with YAML = plain text

!

Package

!
!
!

Config

!
!
!

Service

!
!

Define for each environment

as code
‣ InfrastructureVersioned in GitHub
‣ Role based puppet
‣ Puppet standalone
System automation - configuration
automation - configuration
!
hiera packed with YAML = plain text

!
!
!
!
!
!
!
!
!
Define YAML environment
‣ Hiera withfor each- just text files
Versioned in code
‣ Treat config asGitHub

‣ Versioning via GitHub
System automation - credentials
!
!

Raziel
‣ Take care of sensitive data
‣ Using GPG encryption
‣ Keep versioning and history
!

‣ github.com/hajoeichler/raziel
System automation - orchestration
!

‣ How to deal with more than 10 servers? mcollective
‣ Facts/roles link puppet modules to mcollective filters
!

‣ mco ping
‣ mco ping -F roles=sphere-merchantcenter
‣ mco ping -F group=black
‣ mco ping -F roles=sphere-merchantcenter -F group=black

‣ Plugin system
‣ Write your own agents
Pretty complex...
!

several	

environment
LB

different	

languages

config
sensitive	

data

fast	

iterations

LB

multiple	

server
Demystify
!

‣ Build tooling that brings complexity
of systems down to a
!

‣ single command line
‣ click of a button
Demystify puppet
!

‣ vagrant brings puppet down to the
developer machine
!

‣ run production squeezed in one vm
‣ bit of port magic
‣ port forwarding to developer host
‣ shared folders
!

‣ no more “but it works on my machine”
Demystify operations
!

‣ git like interface (GLI)
‣ mcollective agent
Demystify Continuous Integration
!

‣ we use Jenkins and travis ci
‣ build.sh for all projects
‣ build / test / package / publish
‣ trigger deployments and acceptance tests
‣ build it once only! (no releases)
!

‣ But, what runs where?

github.com/hajoeichler/JenkinsJobConfigGenerator
Demystify deployments
!
!
!

HipChat with
!

robut = mco client
!
!
!
The big picture
!
!
!
!
! GitHub
UserVoice
! JIRA
PagerDuty
! ...

Mission
Control

S3 repo

robut

robut

robut

CI

Staging

Production
BTW: Quality matters
!

‣ All this works only when you can trust
your security net = automated tests
!

‣ No explicit QA team, task whatever
‣ Let all involve in the story
we use cucumber for specifying
‣ web
‣ command line
‣ API
Things to take home
!

‣ There is a new eCommerce platform
!

‣ Package everything and build it only
once
‣ Automate what ever possible - test it!
‣ You build it you deploy it
‣ Give trust to developers and provide
nice tooling
‣ Build an audit log on what happens
visible to all

Data Source: eMarketer 2012
Questions?
commercetools.com
@commercetools
@sphereio
!

SPHERE.IO - from developers to developers!

Try: admin.sphere.io
‣ 60 days for free!
‣ no cc required
‣ #holyshit

Continuous Deployment - Developers Conference Hamburg #dchh