continuous delivery di una webapp by example - fabio mora - codemotion roma 2015

37
Fabio Mora Continuous Delivery di una WebApp by example [email protected] @morafabio ROME 27-28 march 2015

Upload: codemotion

Post on 15-Jul-2015

149 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

Fabio Mora

Continuous Delivery di una WebApp by example

[email protected] @morafabio

ROME 27-28 march 2015

Page 2: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Chi sono

2

1990 Fabio Mora

2001 Linux Community

2008 Freelance

2010 SRL

2011 GrUSP, Agile Movement

2013 Economia

2014 Cocoon Projects

2014 eBay

Page 3: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

3

…una user story non è completa

finché

non è consegnata a chi la deve usare…

Page 4: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

4

http://symfony.com/it/doc/current/cookbook/deployment/tools.html

C’era una volta…

Page 5: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

5

Quanto costa cambiare una singola

riga di codice in produzione?

Page 6: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Flow complessi

6

develop integrate build QA deploy

manual manual manualmanual

merge

check

PR

test

metrics

docs

changelog

package

go live!

KPI

notify

code

test

build

git push

stories

focus x * dev * y * progetti

smoke

regression

branching

Page 7: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

7

Page 8: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

8

“A lazy programmer

is a good programmer”

Larry Wall (Perl)

Page 9: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Ridurre il costo: automatizziamo

9

auto auto autoone-click

auto

develop integrate build QA deploy

Continuos Integration

Continuos Delivery

Page 10: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

10

Un esempio(con un tocco di Smfony2)

Come?

Page 11: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Checklist: premesse

11

✓ Version Control System: ad esempio Git

✓ Test Coverage: unit, integration, functional, e2e…

✓ Avere un host da dedicare a C.I.

✓ Integrare almeno una volta al giorno

✓ Prima di integrare, eseguire una build locale

Page 12: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

1. Build

12

• Cleanup

• Composer, Bower

• Lint and CS checks

• Parameters

• Grunt, CSS, sprites…

• Security check

• Databse migrations

• Fixture

• Assets building

• phpunit -c phpunit.xml

• Altri tool

targets

build.xml

ant build

Page 13: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

13

ant composer

ant test

Page 14: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

14

ant doctrine-setup

Page 15: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

2. C.I. con Jenkins

15

web interface

• Build (parametrizzate)

• Check safety delle pull-request

• Testing, smoke, regression

• Metriche, docs, changelog

• Event triggers

• Notifiche (mail, push…)

• …decine di plugins!

apt-get install jenkinswget http://localhost:8080/jnlpJars/jenkins-cli.jarjava -jar jenkins-cli.jar -s http://localhost:8080 install-plugin [plugins]

Page 16: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

16

Page 17: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

17

Page 18: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

2

18

Setup di un task

Page 19: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

19

Possibile scenario

http://jenkins-php.org/

Git, GitHub

SCM

GreenBalls, Workspace Cleanup,

HTMLPublisher

Utility

xUnit, Clover PHP

Test

CheckStyle, DRY, PMD, Violations

Metrics

Page 20: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

3. Deploy

20

• Fortemente legato all’infrastruttura

• Definite una strategia di testing

• Tool: Puppet, Chef, Capistrano, bash, Java DT…

gem install capifonycapifony .

app/config/deploy.rb

Per Symfony2: capifony

• Collezione di recipes

• “Multistage” extension

Page 21: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

21

app/config/deploy.rb

Page 22: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

22

cap deploy:setupcap deploy

cap deploy:rollback

Page 23: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

23

cap -vT

cap -vT | wc -l 83

Page 24: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

24

Le cose che avrei voluto sapere prima

Lezione imparata!

Page 25: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Auto-deploy in QA

25

docker build Dockerfiledocker start CONTAINERdocker run CONTAINER start.sh

Dockerfile

Page 26: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Docker Flow per Git Flow

26

DockerUI

deploy web Interface

DNS

IN A *.pug-mi.qa rev-proxy

containerdiscovery

feature-2

Docker

docker ps GET /containers/json

feature-1

feature-3 feature-n apache:6081

apache:6080

ReverseProxy

GET / Host: feature-n.pug-mi.qa

Page 27: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Testing End2End in buildhost

27

facebook/php-webdriver

Selenium Xfvb Jenkins

https://github.com/morafabio/headless-selenium

Page 28: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Testing End2End cross platform

28

facebook/php-webdriverJenkins

Progetti Jenkins notturni/settimanali

Page 29: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Marcare i deploy sulle dashboard

29deploy

Page 30: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Visual Feedback

30

+

http://jenkins.ci/api/json

Page 31: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Visual Feedback

31

+

http://jenkins.ci/api/json

Page 32: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

@morafabio

Tips & Tricks

32

✓ xUnit: gruppi CI e No-CI

✓ Usare servizi locali (DNS, repository)

✓ Jenkins e sandbox delle build

✓ Cancellare i workspace all’inizio

✓ Script ad-hoc per cancellare le cache

✓ “Green Balls” plugin per Jenkins

✓ Git tag dopo ogni deploy

✓ Bash!

Page 33: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

33“Extreme Programming Explained / 2nd Ed.”Beck, Andres - Addison Wesley

Bohem, Beck

Page 34: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

34

planning game, small releases,

metaphor, simple design, testing,

refactoring, pair programming, collecting ownership,

continuos integration, 40 hours/week, customer on site,

coding standards, whole team

Page 35: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

35

• Travis CI, wercker, Circle CI• Go, Cruise Control, Idephix• Mesos, Marathon, ZooKeeper• Consul - haProxy, Varnish

MOAR books!

MOAR tools!

Page 36: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

36

Grazie :-)

Page 37: Continuous Delivery di una webapp by example - Fabio Mora - Codemotion Roma 2015

ROME 27-28 march 2015

Critiche :-)?

[email protected] linkedin.com/in/fabiomora facebook.com/fabio.mm @morafabio

https://joind.in/event/view/3347

github.com/morafabio/symfony-ci

Feedback

Codice

Special credits to my colleague Ivan Coppa

github.com/eBayClassifiedsGroup/paas-in-a-box

Contatti