SlideShare une entreprise Scribd logo
1  sur  82
Télécharger pour lire hors ligne
TDD e Continuous Delivery 
sull’infrastruttura 
@filippo
Filippo Liverani 
@filippo
agile + IT operations? 
photo credit: https://www.flickr.com/photos/kalexanderson/6354182139/
1. test driven development 
2. continuous delivery 
3. nella pratica
Test Driven Development 
photo credit: https://www.flickr.com/photos/pagedooley/4308431673/
le 3 leggi del TDD 
photo credit: https://www.flickr. 
com/photos/oldpatterns/5837733407/
1 
Non scriverai codice di 
produzione finché non avrai 
scritto un test che fallisce
2 
Non scriverai più di un test che sia 
sufficiente a provocare un 
fallimento, e la non compilazione è 
un fallimento
3 
Non scriverai più codice di 
produzione di quanto ne serva per 
passare il test corrente
piccoli cambiamenti incrementali 
sistema sempre funzionante 
i fallimenti devono essere risolti subito
perchè? 
abbatte la complessità 
soluzione di un problema complesso 
→ soluzione di problemi più semplici
i benefici 
criterio di accettazione implicito 
specifica eseguibile 
suite di regressione completa 
feedback immediato e continuo
le difficoltà? 
richiede disciplina 
cambiare le abitudini è difficile 
il management non capisce la qualità interna
continuous delivery 
photo credit: https://www.flickr.com/photos/afoncubierta/9049067504/
benefici 
si vede se abbiamo costruito la cosa giusta 
release frequenti -> meno rischi per release 
indicatore reale di avanzamento
obiettivi 
aumentare la qualità 
diminuire il cycle time 
CYCLE TIME = tempo per portare una 
modifica di una linea di codice in 
produzione
continuous integration 
photo credit: https://www.flickr.com/photos/dps/136565237/
il problema 
il costo per l'integrazione aumenta con: 
numero di bug 
numero di componenti 
tempo trascorso dall'ultima integrazione
la soluzione? 
integrazioni rapide e continue 
senza bloccare il processo
i benefici 
i problemi si trovano subito 
si trovano facilmente 
meno rischi 
feedback rapido 
nessun punto cieco nel processo 
predizioni più accurate
le 10 pratiche 
photo credit: https://www.flickr.com/photos/edenpictures/3813227079/
1 
un solo rep ository 
tutto quello che serve deve essere versionato
2 
build automatica 
artefatto finale pronto per la produzione 
ogni passo automatizzato
3 
test automatici 
dai sorgenti ai test che girano 
nessun intervento manuale 
nessuna modifica dell'ambiente
4 
commit frequenti 
al MASSIMO una volta al giorno 
lavorare sul trunk
5 
integrazione a ogni commit 
build di riferimento 
monitor dello stato del repository 
massima priorità alla build funzionante
6 
build veloce 
<10min 
feedback immediato 
divisione in stage (pipeline)
7 
su un clone di produzione 
stessi problemi che si verificherebbero in produzione 
ambiente identico 
sistema operativo 
librerie 
hardware 
rete
8 
ultimo artefatto accessibile 
demo e test sempre disponibili 
chiaramente identificabile da tutti
9 
tutti vedono cosa succede 
comunicazione immediata dello stato 
pubblicamente accessibile
10 
deploy automatico 
riduzione dei tempi 
riduzione degli errori 
rollback
come arrivarci? 
1. TESTARE 
2. AUTOMATIZZARE 
3. VELOCIZZARE
delivery pipeline 
photo credit: https://www.flickr.com/photos/abuaiman/6267986277/
pipeline 
implementazione automatizzata 
del processo di build, deploy, 
test e rilascio
1. visibilità 
2. feedback 
3. controllo
struttura 
sequenza di stage 
se uno stage fallisce la pipeline si blocca 
ogni commit genera una nuova pipeline
infrastructure as code 
photo credit: https://www.flickr.com/photos/mwichary/2348383457/
DevOps 
+ 
virtualizzazione e cloud 
-> 
anche l’infrastruttura è codice
la potenza del testo 
collaborazione + automazione 
trasferimento della conoscenza 
tooling
i benefici 
ripetibilità 
tracciabilità 
manutenibilità 
velocità
immutable servers 
 
photo credit: https://www.flickr.com/photos/mwichary/2348383457/
approccio tradizionale 
cambiamenti e disallineamenti - 
> 
snowflake server
sincronizzazione 
creazione 
immagine 
provisioning 
istanza 
cambiamento cambiamento 
applicazione 
cambiamento 
applicazione 
cambiamento
immutable server 
creazione 
immagine 
provisioning 
istanza 
cambiamento 
creazione 
immagine 
provisioning 
istanza
nella pratica 
photo credit: https://www.flickr.com/photos/jurvetson/489257240/
source code 
repository 
CI server 
production 
image 
commit 
test image 
dev box 
checkout 
provision 
provision run tests
$ git init git-cookbook 
$ cd git-cookbook
name "git" 
version "0.1.0" 
git-cookbook/metadata.rb
Test Kitchen
$ kitchen init --driver=kitchen-vagrant
--- 
driver: 
name: vagrant 
provisioner: 
name: chef_solo 
platforms: 
- name: ubuntu-14.04 
suites: 
- name: default 
run_list: 
- recipe[git::default] 
git-cookbook/.kitchen.yml
git-cookbook/test/integration/server/serverspec/git_spec.rb 
require 'serverspec' 
set :backend, :exec 
describe package('git') do 
it { should be_installed } 
end
$ kitchen test
====================================== 
Recipe Compile Error 
======================================== 
Chef::Exceptions::RecipeNotFound 
-------------------------------- 
could not find recipe default for cookbook git 
>>>>>> Converge failed on instance <default-ubuntu- 
1404>.
include_recipe "apt" 
package "git" 
git-cookbook/recipes/default.rb
name "git" 
version "0.1.0" 
depends "apt" 
git-cookbook/metadata.rb
git-cookbook/Berksfile 
source "https://api.berkshelf.com" 
metadata
$ kitchen test
Package "git" 
should be installed 
Finished in 0.21441 seconds (files took 0.36317 
seconds to load) 
1 example, 0 failures 
Finished verifying <default-ubuntu-1404> (0m33. 
52s). 
-----> Kitchen is finished. (1m31.77s)
{ 
"variables": { 
"aws_access_key": null, 
"aws_secret_key": null 
}, 
... 
packer.json - 1
... 
"builders": [{ 
packer.json - 2 
"type": "amazon-ebs", 
"access_key": "{{user `aws_access_key`}}", 
"secret_key": "{{user `aws_secret_key`}}", 
"region": "eu-west-1", 
"ami_virtualization_type": "hvm", 
"source_ami": "ami-28ff505f", 
"instance_type": "t2.micro", 
"ssh_username": "ubuntu", 
"ami_name": "git" 
}] 
...
... 
"provisioners": [ 
packer.json - 3 
{ 
"type": "chef-solo", 
"cookbook_paths": ["berks-cookbooks"], 
"run_list": ["git::default"] 
} 
] 
}
source 'https://api.berkshelf.com' 
cookbook 'git', path: './git-cookbook' 
Berksfile
$ berks vendor
$ packer build  
-var 'aws_access_key=YOUR ACCESS KEY'  
-var 'aws_secret_key=YOUR SECRET KEY'  
packer.json
==> Builds finished. The artifacts of successful 
builds are: 
--> amazon-ebs: AMIs were created: 
eu-west-1: ami-ac3199db
{ 
"AWSTemplateFormatVersion" : "2010-09-09", 
"Description" : "Git box", 
"Parameters" : { 
"AmiId" : { 
"Type" : "String" 
} 
}, 
... 
cloudformation.json - 1
... 
"Resources" : { 
cloudformation.json - 2 
"Instance" : { 
"Type" : "AWS::EC2::Instance", 
"Properties" : { 
"ImageId" : { "Ref" : "AmiId" }, 
"KeyName" : "git-box-key", 
"InstanceType" : "t2.micro" 
} 
} 
} 
}
$ aws cloudformation create-stack  
--stack-name git-box  
--region eu-west-1  
--template-body file://./cloudformation.json 
--parameters ParameterKey=AmiId, 
ParameterValue=ami-ac3199db
{ 
"StackId": "arn:aws:cloudformation:eu-west- 
1:422553113847:stack/git-box/978445e0-5f78-11e4- 
95a6-507bb00bdca0" 
}
risorse
https://github.com/filippo-liverani/test-driven-infrastructure
grazie!

Contenu connexe

Tendances

Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...
Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...
Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...Giulio Vian
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS BuildGian Maria Ricci
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automationDotNetCampus
 
Java Unit Testing - Introduction
Java Unit Testing - IntroductionJava Unit Testing - Introduction
Java Unit Testing - Introductionfgianneschi
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Developmentsazilla
 
Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?Flavius-Florin Harabor
 

Tendances (9)

Build Automation Tips
Build Automation TipsBuild Automation Tips
Build Automation Tips
 
DevOps Jump Start
DevOps Jump StartDevOps Jump Start
DevOps Jump Start
 
Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...
Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...
Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...
 
Making Chatbots
Making ChatbotsMaking Chatbots
Making Chatbots
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS Build
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
 
Java Unit Testing - Introduction
Java Unit Testing - IntroductionJava Unit Testing - Introduction
Java Unit Testing - Introduction
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Development
 
Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?
 

En vedette

Questionario digital champions 2015
Questionario digital champions 2015Questionario digital champions 2015
Questionario digital champions 2015Vittorio Pasteris
 
Tutti gli uomini del Quirinale
Tutti gli uomini del QuirinaleTutti gli uomini del Quirinale
Tutti gli uomini del QuirinaleVittorio Pasteris
 
Il piano di E-government 2012 parte seconda
Il piano di E-government 2012 parte secondaIl piano di E-government 2012 parte seconda
Il piano di E-government 2012 parte secondaVittorio Pasteris
 
Regolamento che disciplina l’attività di formazione professionale continua pe...
Regolamento che disciplina l’attività di formazione professionale continua pe...Regolamento che disciplina l’attività di formazione professionale continua pe...
Regolamento che disciplina l’attività di formazione professionale continua pe...Vittorio Pasteris
 
Wearable botnets 201560319_v3
Wearable botnets 201560319_v3Wearable botnets 201560319_v3
Wearable botnets 201560319_v3Codemotion
 
Gli internauti italiani e le news
Gli internauti italiani e le newsGli internauti italiani e le news
Gli internauti italiani e le newsVittorio Pasteris
 
Regolamento per la formazione continua dal 2014 dei giornalisti in Italia
Regolamento per la formazione continua dal 2014 dei giornalisti in ItaliaRegolamento per la formazione continua dal 2014 dei giornalisti in Italia
Regolamento per la formazione continua dal 2014 dei giornalisti in ItaliaVittorio Pasteris
 
Pacchetto di misure per un green new deal in Italia
Pacchetto di misure per un green new deal in ItaliaPacchetto di misure per un green new deal in Italia
Pacchetto di misure per un green new deal in ItaliaVittorio Pasteris
 
LINEE GUIDA DI RIFORMA DELL’ORDINAMENTO GIORNALISTICO Approvate il 19 Gennaio...
LINEE GUIDA DI RIFORMA DELL’ORDINAMENTO GIORNALISTICO Approvate il 19 Gennaio...LINEE GUIDA DI RIFORMA DELL’ORDINAMENTO GIORNALISTICO Approvate il 19 Gennaio...
LINEE GUIDA DI RIFORMA DELL’ORDINAMENTO GIORNALISTICO Approvate il 19 Gennaio...Vittorio Pasteris
 
Pubblicista, una figura da reinventare
Pubblicista, una figura da reinventarePubblicista, una figura da reinventare
Pubblicista, una figura da reinventareVittorio Pasteris
 
La salute del programmatore
La salute del programmatoreLa salute del programmatore
La salute del programmatoreFilippo Liverani
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

En vedette (14)

Questionario digital champions 2015
Questionario digital champions 2015Questionario digital champions 2015
Questionario digital champions 2015
 
Tutti gli uomini del Quirinale
Tutti gli uomini del QuirinaleTutti gli uomini del Quirinale
Tutti gli uomini del Quirinale
 
Il piano di E-government 2012 parte seconda
Il piano di E-government 2012 parte secondaIl piano di E-government 2012 parte seconda
Il piano di E-government 2012 parte seconda
 
Regolamento che disciplina l’attività di formazione professionale continua pe...
Regolamento che disciplina l’attività di formazione professionale continua pe...Regolamento che disciplina l’attività di formazione professionale continua pe...
Regolamento che disciplina l’attività di formazione professionale continua pe...
 
Wearable botnets 201560319_v3
Wearable botnets 201560319_v3Wearable botnets 201560319_v3
Wearable botnets 201560319_v3
 
Gli internauti italiani e le news
Gli internauti italiani e le newsGli internauti italiani e le news
Gli internauti italiani e le news
 
Regolamento per la formazione continua dal 2014 dei giornalisti in Italia
Regolamento per la formazione continua dal 2014 dei giornalisti in ItaliaRegolamento per la formazione continua dal 2014 dei giornalisti in Italia
Regolamento per la formazione continua dal 2014 dei giornalisti in Italia
 
Pacchetto di misure per un green new deal in Italia
Pacchetto di misure per un green new deal in ItaliaPacchetto di misure per un green new deal in Italia
Pacchetto di misure per un green new deal in Italia
 
LINEE GUIDA DI RIFORMA DELL’ORDINAMENTO GIORNALISTICO Approvate il 19 Gennaio...
LINEE GUIDA DI RIFORMA DELL’ORDINAMENTO GIORNALISTICO Approvate il 19 Gennaio...LINEE GUIDA DI RIFORMA DELL’ORDINAMENTO GIORNALISTICO Approvate il 19 Gennaio...
LINEE GUIDA DI RIFORMA DELL’ORDINAMENTO GIORNALISTICO Approvate il 19 Gennaio...
 
Pubblicista, una figura da reinventare
Pubblicista, una figura da reinventarePubblicista, una figura da reinventare
Pubblicista, una figura da reinventare
 
La salute del programmatore
La salute del programmatoreLa salute del programmatore
La salute del programmatore
 
Bravi si diventa
Bravi si diventaBravi si diventa
Bravi si diventa
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Similaire à TDD e Continuous Delivery sull'infrastruttura

Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Fabio Mora
 
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"Emerasoft, solutions to collaborate
 
SESAMO (application login automator): evoluzioni applicative e considerazioni...
SESAMO (application login automator): evoluzioni applicative e considerazioni...SESAMO (application login automator): evoluzioni applicative e considerazioni...
SESAMO (application login automator): evoluzioni applicative e considerazioni...AndrijaCiric1
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERDotNetCampus
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 
Working between the clouds (versione completa)
Working between the clouds (versione completa)Working between the clouds (versione completa)
Working between the clouds (versione completa)Davide Cerbo
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the cloudsDavide Cerbo
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsIgor Antonacci
 
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis WebSpring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis WebMassimiliano Dessì
 
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Perché è così difficile il deploy dei database  - DevCast DevOps SeriePerché è così difficile il deploy dei database  - DevCast DevOps Serie
Perché è così difficile il deploy dei database - DevCast DevOps SerieGiulio Vian
 
Continuous Deployment - Agile Day 2010
Continuous Deployment - Agile Day 2010Continuous Deployment - Agile Day 2010
Continuous Deployment - Agile Day 2010migratore
 
Jvm performance Tuning
Jvm performance TuningJvm performance Tuning
Jvm performance TuningMarco Sabatini
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...Emerasoft, solutions to collaborate
 
ASP.NET performance optimization
ASP.NET performance optimizationASP.NET performance optimization
ASP.NET performance optimizationAndrea Dottor
 

Similaire à TDD e Continuous Delivery sull'infrastruttura (20)

Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2
 
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
 
Total Testing in DevOps
Total Testing in DevOpsTotal Testing in DevOps
Total Testing in DevOps
 
SESAMO (application login automator): evoluzioni applicative e considerazioni...
SESAMO (application login automator): evoluzioni applicative e considerazioni...SESAMO (application login automator): evoluzioni applicative e considerazioni...
SESAMO (application login automator): evoluzioni applicative e considerazioni...
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVER
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Working between the clouds (versione completa)
Working between the clouds (versione completa)Working between the clouds (versione completa)
Working between the clouds (versione completa)
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the clouds
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
 
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis WebSpring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis Web
 
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Perché è così difficile il deploy dei database  - DevCast DevOps SeriePerché è così difficile il deploy dei database  - DevCast DevOps Serie
Perché è così difficile il deploy dei database - DevCast DevOps Serie
 
Azure functions
Azure functionsAzure functions
Azure functions
 
Continuous Deployment - Agile Day 2010
Continuous Deployment - Agile Day 2010Continuous Deployment - Agile Day 2010
Continuous Deployment - Agile Day 2010
 
Jvm performance Tuning
Jvm performance TuningJvm performance Tuning
Jvm performance Tuning
 
Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
Continuos Integration
Continuos IntegrationContinuos Integration
Continuos Integration
 
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
 
TTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug romaTTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug roma
 
ASP.NET performance optimization
ASP.NET performance optimizationASP.NET performance optimization
ASP.NET performance optimization
 

TDD e Continuous Delivery sull'infrastruttura