Top Banner
Continuous Delivery Michael Neale @michaelneale cloudbees.com Tuesday, 26 November 13
39

Cd syd

May 10, 2015

Download

Technology

Michael Neale

Continuous Delivery - an introduction. Using Jenkins.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cd syd

Continuous DeliveryMichael [email protected]

Tuesday, 26 November 13

Page 2: Cd syd

Continuous Delivery?

Tuesday, 26 November 13

Page 3: Cd syd

Definitions

Continuous Deployment:

FTP php files to production server.

Done.

Tuesday, 26 November 13

Page 4: Cd syd

Definitions

Continuous Deployment:

Change in SCM -> Build/Test -> Deploy (deploy to prod, or staging?)

Tuesday, 26 November 13

Page 5: Cd syd

Definitions

Continuous Delivery:

Change in SCM -> Build/Test -> Be able to deploy at will (keep it clean, ready to deploy)

Typically always deployed to a staging environment

Tuesday, 26 November 13

Page 6: Cd syd

Definitions

Continuous Integration:

Change in SCM -> Build/Test -> Feedback cycle

CD requires “CI”

Tuesday, 26 November 13

Page 7: Cd syd

CD - commit to deploy

Target server

Tuesday, 26 November 13

Page 8: Cd syd

Benefits

Quicker turn aroundHappier usersLess risk per deploymentIdeally deploy “as is” at (almost) any timeFits with “agile” approaches nicely

Lots more - bing it!

Tuesday, 26 November 13

Page 9: Cd syd

Necessity

Risk of deployment proportional to time since last deployment

We are all deploying services now, not so much apps in a box (other than app store!) - world has changed.

Tuesday, 26 November 13

Page 10: Cd syd

Continuous Integration

Jenkins-ci.org

Also have to mention Atlassian Bamboo!

Tuesday, 26 November 13

Page 11: Cd syd

Requirements for CD

Deep SCM integration - commit hooksReliable Production-CI service (not under someones desk)Automated DeploymentMultiple deploy target environmentsEasy rollback

Tuesday, 26 November 13

Page 12: Cd syd

CloudBees is:

Tuesday, 26 November 13

Page 13: Cd syd

CI serverApp service repos

Tuesday, 26 November 13

Page 14: Cd syd

Fiddly

Fiddly to setup by hand - all the hooks, triggers, scripts, automation...

so we came up with “ClickStarts”

Set up all the moving parts

Tuesday, 26 November 13

Page 15: Cd syd

CD quick start - automated

Clone from template to private repoSetup commit hooksSetup buildIssue initial build & run testsSetup runtime container Deploy

All one click, ideally

Tuesday, 26 November 13

Page 16: Cd syd

Tedium Lots of one off steps to get going with CD

You won’t ever remember how to setup commit hooks each time you need to

Tuesday, 26 November 13

Page 17: Cd syd

Tuesday, 26 November 13

Page 18: Cd syd

AppsForge/source repos

Jenkins

Build slave pools

open source/template repos

on commit

Tuesday, 26 November 13

Page 19: Cd syd

Dog food eating

Tuesday, 26 November 13

Page 20: Cd syd

Tuesday, 26 November 13

Page 21: Cd syd

CD - dogfoodSome projects are direct to production on tests pass

Some are direct to “staging” until merged into master branch (git branches to control deployment is common)

Easily, and often, roll back.

Tuesday, 26 November 13

Page 22: Cd syd

Tuesday, 26 November 13

Page 23: Cd syd

ExamplePlay Framework:

“Seed project”

Clone into actual project - setup build steps - setup unit/e2e tests - prepare/deploy into a container - setup commit hook

Tuesday, 26 November 13

Page 24: Cd syd

https://github.com/../play2-clickstart

git.cloudbees.com/your/app

you.ci.cloudbees.com

yourapp.com

shallow clone

Your code

Tuesday, 26 November 13

Page 25: Cd syd

But wait, it isn’t that easyMore complex workflowsWarming up environmentsSafe fall-backMonolithic appsDatabase updates

Some solutions...

Tuesday, 26 November 13

Page 26: Cd syd

Complex workflows

Tuesday, 26 November 13

Page 28: Cd syd

Warming up environmentsAnd “fail safe” fall back.

BOTH solved by blue-green deployment.

http://martinfowler.com/bliki/BlueGreenDeployment.html

Tuesday, 26 November 13

Page 29: Cd syd

Tuesday, 26 November 13

Page 30: Cd syd

Blue Green2 clones of production environment

Always deploy to “blue”When ready - flip switch (router) from green to blue.

If bad - flip back - no redeployments, no other changes

Tuesday, 26 November 13

Page 31: Cd syd

Blue GreenNeed to be both production grade environments!

Safer deployment

Can warm up “blue” before flipping switch (prime caches, run final smoke testing)

Deploying to prod is NOT deploying - just changing what you call production!

Tuesday, 26 November 13

Page 33: Cd syd

Blue GreenCan shut down “blue” if needed, to safe resources

Large customers already doing this

Large web companies all do this

Tuesday, 26 November 13

Page 34: Cd syd

Blue GreenWarming up: as simple as a curl script in a loop**

** Works quite well

Tuesday, 26 November 13

Page 35: Cd syd

Monolithic appsSolution: avoid if you can!

Microservices (a whole other topic I love to talk about)

CD then applies to each service, individually. Each service has radically different release cadences.

Releases are massively low risk.

Tuesday, 26 November 13

Page 36: Cd syd

micro-service debugging

Tuesday, 26 November 13

Page 37: Cd syd

Monolithic appsStill can do CD

Good test suite?

Isolate “risky” changes - more frequent low risk deploys.

Risk of deploy is proportional to the time between deploys

Tuesday, 26 November 13

Page 38: Cd syd

DatabasesOption 1: Snapshot and then deploy (for rollback)

Option 2: Separate out “destructive” deploys (schema change, data change) from CD deploys - not one size fits all

Daily deploys: DB/data scheme doesn’t change daily (I hope!)

Tuesday, 26 November 13

Page 39: Cd syd

Thank you

Michael Nealehttps://twitter.com/michaelnealehttps://developer.cloudbees.com

Tuesday, 26 November 13