continuous delivery di una webapp - by example
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
4
http://symfony.com/it/doc/current/cookbook/deployment/tools.html
C’era una volta…
@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
@morafabio
Ridurre il costo: automatizziamo
9
auto auto autoone-click
auto
develop integrate build QA deploy
Continuos Integration
Continuos Delivery
@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
@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]
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
@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
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!
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!
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