continuous delivery di una webapp - by example

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

Upload: fabio-mora

Post on 16-Jul-2015

256 views

Category:

Technology


1 download

TRANSCRIPT

Fabio Mora

Continuous Delivery di una WebApp by example

[email protected] @morafabio

ROME 27-28 march 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

3

…una user story non è completa

finché

non è consegnata a chi la deve usare…

4

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

C’era una volta…

5

Quanto costa cambiare una singola

riga di codice in produzione?

@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

7

8

“A lazy programmer

is a good programmer”

Larry Wall (Perl)

@morafabio

Ridurre il costo: automatizziamo

9

auto auto autoone-click

auto

develop integrate build QA deploy

Continuos Integration

Continuos Delivery

10

Un esempio(con un tocco di Smfony2)

Come?

@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

@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

13

ant composer

ant test

14

ant doctrine-setup

@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]

16

17

@morafabio

2

18

Setup di un task

19

Possibile scenario

http://jenkins-php.org/

Git, GitHub

SCM

GreenBalls, Workspace Cleanup,

HTMLPublisher

Utility

xUnit, Clover PHP

Test

CheckStyle, DRY, PMD, Violations

Metrics

@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

21

app/config/deploy.rb

22

cap deploy:setupcap deploy

cap deploy:rollback

23

cap -vT

cap -vT | wc -l 83

24

Le cose che avrei voluto sapere prima

Lezione imparata!

@morafabio

Auto-deploy in QA

25

docker build Dockerfiledocker start CONTAINERdocker run CONTAINER start.sh

Dockerfile

@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

@morafabio

Testing End2End in buildhost

27

facebook/php-webdriver

Selenium Xfvb Jenkins

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

@morafabio

Testing End2End cross platform

28

facebook/php-webdriverJenkins

Progetti Jenkins notturni/settimanali

@morafabio

Marcare i deploy sulle dashboard

29deploy

@morafabio

Visual Feedback

30

+

http://jenkins.ci/api/json

@morafabio

Visual Feedback

31

+

http://jenkins.ci/api/json

@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!

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

Bohem, Beck

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

35

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

MOAR books!

MOAR tools!

36

Grazie :-)

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