SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
Integrazione continua e Jenkins
Vitalij Zadneprovskij
JUG Roma
5 Febbraio 2014
Infosons
Inferno dell'integrazione
●

Scarico il codice sorgente

●

Faccio le mie modifiche

●

Eseguo i test

●

Decido di fare commit

●

Peccato che qualcuno ha fatto
commit sulle stesse classi

●

Cerco di gestire tutti i conflitti

●

Non posso! Sono troppi! :-O

●

Ri-scarico il codice e
ricomincio da capo :-(

Fonte: computerfixperts.com

2 / 14
Come si fa ad evitarlo?
●

Mantieni un repository del codice sorgente

●

Automatizza il build

●

Rendi il build auto-testante

●

Tutti eseguono una commit alla baseline
tutti i giorni

●

Ogni commit fa partire una build

●

Fai in modo che la build sia veloce

●

●

●

●

Esegui i test in un clone dell'ambiente di
produzione
Prendere le ultime versioni dei pacchetti
deve essere facile
Ognuno può vedere quello che sta
succedendo
Automatizza il dispiegamento

Putin scopre l'integrazione continua
Fonte: www.gazprom.com

3 / 14
Mantieni un repository del codice
sorgente
●

●

●

●

Basta usare un software per
il controllo della versione
Scegliere tra lock or merge o
sistema distribuito
Stanno prendendo piede i
sistemi di controllo di
versione distribuito come Git
e Mercurial
Sono ancora molto usati
quelli a lock ottimistico come
Subversion e CVS

Fonte: git-scm.com

4 / 14
Automatizza il build
●

●

●

●

●

Per build intendiamo il processo che
porta dal codice sorgente all'artefatto
che può girare sul server o
direttamente sul computer client
Per buildare basterebbe solo Eclipse,
anche se la configurazione in questo
caso sarebbe molto complicata da
gestire
Opzione più diffusa è Maven, che
permette anche di gestire le
dipendenze da librerie open source
Progetti legacy: Ant
Altre opzioni possibili sono Gradle,
Ivy e Buildr

Fonte: www.hdrinc.com

5 / 14
Rendi il build auto-testante
●

●

●

●

Abbiamo sia i test unitari che i
test di integrazione
Solitamente i test unitari sono
parecchio più veloci dei test di
integrazione
Se si è deciso di usare Maven
come sistema di build, basterà
mettere i test unitari nella
sottocartella /src/test/java
Per i test di integrazione ci sono
varie librerie, tra cui Selenium,
SoapUI, Jmeter, Arquillian

6 / 14
Tutti committano sulla baseline tutti i
giorni
●

●

●

È importante per limitare
i conflitti e quindi l'inferno
dell'integrazione
Difficile convincere gli
sviluppatori a fare
commit tutti i giorni
Ancora più difficile
convincerli a testare il
codice prima di
committarlo

Fonte: quentinwatson.co.uk

7 / 14
Ogni commit fa partire una build
●

●

●

●

Far partire unicamente i test
unitari, postporre i test di
integrazione a quando è possibile,
comunque almeno una volta al
giorno
Ogni singolo commit potrebbe
creare errori o fare fallire i test
È importante che un eventuale
commit che porta nuovi bug venga
individuato immediatamente e vi
sia posto rimedio
Questo principio si basa sul
principio “fail fast”

Fonte: benandcatherine.org

8 / 14
Fai in modo che la build sia veloce
●

●

●

●

●

●

Se ogni commit fa partire una
build, la build deve essere la più
veloce possibile
Suddividere build in due fasi
Prima fase: compilazione e test
unitari
Seconda fase: test di
integrazione
La seconda fase gira quando
possibile
Usare basi dati in memoria come
HSQLDB

Fonte: missingbite.com

9 / 14
Esegui i test in un clone
dell'ambiente di produzione
●

Anche la più piccola delle
differenze tra l'ambiente di test
e quello di produzione può
rendere estremamente difficile
riprodurre un bug

●

Stesso sistema operativo

●

Stessa base dati

●

Stessa JVM

●

●

Stesso application / web
server
Stessi browser
Fonte: softicons.com

10 / 14
Prendere le ultime versioni dei
pacchetti deve essere facile
●

●

●

Per le persone è più facile vedere
ed eseguire le versioni
intermedie del software e dire
che cosa è che non va
Fai in modo che ci sia un posto in
cui tutte le persone possano
prendere l'eseguibile e testarlo
Sopratutto le persone che
devono far girare delle demo dei
prodotti per far vedere a
potenziali clienti il funzionamento
del software hanno bisogno di
sapere dove trovare i pacchetti

Fonte: bodecibody.blogspot.it

11 / 14
Ognuno deve poter vedere quello
che sta succedendo
●

●

●

●

Lo stato del progetto deve essere
visibile e trasparente a tutte le parti
coinvolte
Questo permette di stabilire
scadenze realistiche e allocare
tempo per la risoluzione dei
problemi attuali
Inoltre, problemi di usabilità
possono essere individuati più
velocemente se è possibile vedere
e testare facilmente l'applicativo
È possibile stabilire un rapporto di
fiducia con tutte le parti coinvolte
nel processo di sviluppo

Fonte: jimbrooks.org

12 / 14
Automatizza il dispiegamento
●

●

●

●

Per dispiegamento si intende il
trasferimento degli artefatti sull'ambiente
di destinazione e l'esecuzione di script di
allineamento
Per fare continous integration bisogna
avere diversi ambienti che devono
essere allineati più volte al giorno
Per fare questo è buona norma avere dei
meccanismi che permettano il rilascio dei
risultati delle build sui vari ambienti,
compreso quello di produzione
Dopo il build è possibile trasferire il
risultato del build in una cartella di un
ambiente e far girare degli script di
allineamento
Fonte: photo-dictionary.com

13 / 14
Jenkins
●

●

●

●

●

●

●

Web application che gira in un servlet
container
Permette di lanciare delle build e dei
dispiegamenti
Permette di vedere i risultati dei test
Non ha bisogno di basi dati per
funzionare: salva le configurazioni in file
XML
Si integra con gli strumenti di controllo
delle versioni e con gli strumenti di
automazione dei build
È in grado di scaricare autonomamente
Maven e Ant
Estensibile tramite plugin

14 / 14

Contenu connexe

Tendances

Codice di qualità con VS2010 (TDD)
Codice di qualità con VS2010 (TDD)Codice di qualità con VS2010 (TDD)
Codice di qualità con VS2010 (TDD)
XeDotNet
 

Tendances (9)

jAPS 2.0 Community - Hands on camp 2008
jAPS 2.0 Community - Hands on camp 2008jAPS 2.0 Community - Hands on camp 2008
jAPS 2.0 Community - Hands on camp 2008
 
Progetto Linux va a scuola
Progetto Linux va a scuolaProgetto Linux va a scuola
Progetto Linux va a scuola
 
Codice di qualità con VS2010 (TDD)
Codice di qualità con VS2010 (TDD)Codice di qualità con VS2010 (TDD)
Codice di qualità con VS2010 (TDD)
 
Installazione Eclipse Cdt Per Qt
Installazione Eclipse Cdt Per QtInstallazione Eclipse Cdt Per Qt
Installazione Eclipse Cdt Per Qt
 
Installazione Qt/Qt Quick per target Android
Installazione Qt/Qt Quick  per target AndroidInstallazione Qt/Qt Quick  per target Android
Installazione Qt/Qt Quick per target Android
 
Qt Platform Abstraction
Qt Platform AbstractionQt Platform Abstraction
Qt Platform Abstraction
 
Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)
Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)
Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)
 
ALM Revolutions - What's new in visual studio ALM 11
ALM Revolutions - What's new in visual studio ALM 11ALM Revolutions - What's new in visual studio ALM 11
ALM Revolutions - What's new in visual studio ALM 11
 
Metodi asincroni in spring
Metodi asincroni in springMetodi asincroni in spring
Metodi asincroni in spring
 

En vedette

Yale Jenkins Show and Tell
Yale Jenkins Show and TellYale Jenkins Show and Tell
Yale Jenkins Show and Tell
E. Camden Fisher
 

En vedette (10)

Appunti di teoria dell informazione
Appunti di teoria dell informazioneAppunti di teoria dell informazione
Appunti di teoria dell informazione
 
Iced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaIced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java libera
 
Protocolli di comunicazione tra moduli e SOA
Protocolli di comunicazione tra moduli e SOAProtocolli di comunicazione tra moduli e SOA
Protocolli di comunicazione tra moduli e SOA
 
Java 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio SperdutoJava 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio Sperduto
 
Jenkins-CI
Jenkins-CIJenkins-CI
Jenkins-CI
 
Jenkins
JenkinsJenkins
Jenkins
 
Yale Jenkins Show and Tell
Yale Jenkins Show and TellYale Jenkins Show and Tell
Yale Jenkins Show and Tell
 
Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)
 
CI and CD with Jenkins
CI and CD with JenkinsCI and CD with Jenkins
CI and CD with Jenkins
 
(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines
 

Similaire à Continous integration e jenkins

Similaire à Continous integration e jenkins (20)

Milano Meetup #8 - Testing & Salesforce Integration
Milano Meetup #8 - Testing & Salesforce IntegrationMilano Meetup #8 - Testing & Salesforce Integration
Milano Meetup #8 - Testing & Salesforce Integration
 
Software Testing e TDD
Software Testing e TDDSoftware Testing e TDD
Software Testing e TDD
 
Continuos Integration
Continuos IntegrationContinuos Integration
Continuos Integration
 
Total Testing in DevOps
Total Testing in DevOpsTotal Testing in DevOps
Total Testing in DevOps
 
Riccardo Tempesta - Strumenti di automazione in Magento 2
Riccardo Tempesta - Strumenti di automazione in Magento 2Riccardo Tempesta - Strumenti di automazione in Magento 2
Riccardo Tempesta - Strumenti di automazione in Magento 2
 
Strumenti di automazione in Magento 2
Strumenti di automazione in Magento 2Strumenti di automazione in Magento 2
Strumenti di automazione in Magento 2
 
Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdf
 
OpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studioOpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studio
 
Selenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiSelenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio Benedetti
 
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
 
Software Testing & Test Driven Development
Software Testing & Test Driven DevelopmentSoftware Testing & Test Driven Development
Software Testing & Test Driven Development
 
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMwareSistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
 
Infrastructure as Data
Infrastructure as DataInfrastructure as Data
Infrastructure as Data
 
Build Automation Tips
Build Automation TipsBuild Automation Tips
Build Automation Tips
 
Git branching model
Git branching modelGit branching model
Git branching model
 
Continuous Deployment - Agile Day 2010
Continuous Deployment - Agile Day 2010Continuous Deployment - Agile Day 2010
Continuous Deployment - Agile Day 2010
 
MuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdfMuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdf
 
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 

Continous integration e jenkins

  • 1. Integrazione continua e Jenkins Vitalij Zadneprovskij JUG Roma 5 Febbraio 2014 Infosons
  • 2. Inferno dell'integrazione ● Scarico il codice sorgente ● Faccio le mie modifiche ● Eseguo i test ● Decido di fare commit ● Peccato che qualcuno ha fatto commit sulle stesse classi ● Cerco di gestire tutti i conflitti ● Non posso! Sono troppi! :-O ● Ri-scarico il codice e ricomincio da capo :-( Fonte: computerfixperts.com 2 / 14
  • 3. Come si fa ad evitarlo? ● Mantieni un repository del codice sorgente ● Automatizza il build ● Rendi il build auto-testante ● Tutti eseguono una commit alla baseline tutti i giorni ● Ogni commit fa partire una build ● Fai in modo che la build sia veloce ● ● ● ● Esegui i test in un clone dell'ambiente di produzione Prendere le ultime versioni dei pacchetti deve essere facile Ognuno può vedere quello che sta succedendo Automatizza il dispiegamento Putin scopre l'integrazione continua Fonte: www.gazprom.com 3 / 14
  • 4. Mantieni un repository del codice sorgente ● ● ● ● Basta usare un software per il controllo della versione Scegliere tra lock or merge o sistema distribuito Stanno prendendo piede i sistemi di controllo di versione distribuito come Git e Mercurial Sono ancora molto usati quelli a lock ottimistico come Subversion e CVS Fonte: git-scm.com 4 / 14
  • 5. Automatizza il build ● ● ● ● ● Per build intendiamo il processo che porta dal codice sorgente all'artefatto che può girare sul server o direttamente sul computer client Per buildare basterebbe solo Eclipse, anche se la configurazione in questo caso sarebbe molto complicata da gestire Opzione più diffusa è Maven, che permette anche di gestire le dipendenze da librerie open source Progetti legacy: Ant Altre opzioni possibili sono Gradle, Ivy e Buildr Fonte: www.hdrinc.com 5 / 14
  • 6. Rendi il build auto-testante ● ● ● ● Abbiamo sia i test unitari che i test di integrazione Solitamente i test unitari sono parecchio più veloci dei test di integrazione Se si è deciso di usare Maven come sistema di build, basterà mettere i test unitari nella sottocartella /src/test/java Per i test di integrazione ci sono varie librerie, tra cui Selenium, SoapUI, Jmeter, Arquillian 6 / 14
  • 7. Tutti committano sulla baseline tutti i giorni ● ● ● È importante per limitare i conflitti e quindi l'inferno dell'integrazione Difficile convincere gli sviluppatori a fare commit tutti i giorni Ancora più difficile convincerli a testare il codice prima di committarlo Fonte: quentinwatson.co.uk 7 / 14
  • 8. Ogni commit fa partire una build ● ● ● ● Far partire unicamente i test unitari, postporre i test di integrazione a quando è possibile, comunque almeno una volta al giorno Ogni singolo commit potrebbe creare errori o fare fallire i test È importante che un eventuale commit che porta nuovi bug venga individuato immediatamente e vi sia posto rimedio Questo principio si basa sul principio “fail fast” Fonte: benandcatherine.org 8 / 14
  • 9. Fai in modo che la build sia veloce ● ● ● ● ● ● Se ogni commit fa partire una build, la build deve essere la più veloce possibile Suddividere build in due fasi Prima fase: compilazione e test unitari Seconda fase: test di integrazione La seconda fase gira quando possibile Usare basi dati in memoria come HSQLDB Fonte: missingbite.com 9 / 14
  • 10. Esegui i test in un clone dell'ambiente di produzione ● Anche la più piccola delle differenze tra l'ambiente di test e quello di produzione può rendere estremamente difficile riprodurre un bug ● Stesso sistema operativo ● Stessa base dati ● Stessa JVM ● ● Stesso application / web server Stessi browser Fonte: softicons.com 10 / 14
  • 11. Prendere le ultime versioni dei pacchetti deve essere facile ● ● ● Per le persone è più facile vedere ed eseguire le versioni intermedie del software e dire che cosa è che non va Fai in modo che ci sia un posto in cui tutte le persone possano prendere l'eseguibile e testarlo Sopratutto le persone che devono far girare delle demo dei prodotti per far vedere a potenziali clienti il funzionamento del software hanno bisogno di sapere dove trovare i pacchetti Fonte: bodecibody.blogspot.it 11 / 14
  • 12. Ognuno deve poter vedere quello che sta succedendo ● ● ● ● Lo stato del progetto deve essere visibile e trasparente a tutte le parti coinvolte Questo permette di stabilire scadenze realistiche e allocare tempo per la risoluzione dei problemi attuali Inoltre, problemi di usabilità possono essere individuati più velocemente se è possibile vedere e testare facilmente l'applicativo È possibile stabilire un rapporto di fiducia con tutte le parti coinvolte nel processo di sviluppo Fonte: jimbrooks.org 12 / 14
  • 13. Automatizza il dispiegamento ● ● ● ● Per dispiegamento si intende il trasferimento degli artefatti sull'ambiente di destinazione e l'esecuzione di script di allineamento Per fare continous integration bisogna avere diversi ambienti che devono essere allineati più volte al giorno Per fare questo è buona norma avere dei meccanismi che permettano il rilascio dei risultati delle build sui vari ambienti, compreso quello di produzione Dopo il build è possibile trasferire il risultato del build in una cartella di un ambiente e far girare degli script di allineamento Fonte: photo-dictionary.com 13 / 14
  • 14. Jenkins ● ● ● ● ● ● ● Web application che gira in un servlet container Permette di lanciare delle build e dei dispiegamenti Permette di vedere i risultati dei test Non ha bisogno di basi dati per funzionare: salva le configurazioni in file XML Si integra con gli strumenti di controllo delle versioni e con gli strumenti di automazione dei build È in grado di scaricare autonomamente Maven e Ant Estensibile tramite plugin 14 / 14