Vous êtes sur la page 1sur 54

Lintgration continue

Continuous Integration
Presented by Wael ANIBA - UP JEE @ESPRIT - wael.aniba@esprit.tn

Problmatique?

Une histoire de dj-vu ?


Le syndrome du Je comprends pas, a marche sur mon poste !. Les symptmes : o Commit partiels ; o Fichiers de configuration dpendants du poste de travail. Rsultat : quipe rgulirement bloque une demi-journe.

Problmatique?

Imaginez un projet Java avec une quipe de 50 dveloppeurs. Aprs 5 mois de dveloppement sur le projet, lquipe dcide de crer une release (= une version finale de test avant sa livraison au client) pour pouvoir tester lapplication. Mieux vaut tard que jamais comme dit le proverbe, sauf que Aprs 3 tentatives pour faire la release se soldant par des checs, il est dcid de constituer une quipe de 5 personnes pour effectuer cette tche. Et voici le rsultat: 2 ans de retard !

Problmatique?

Le constat indniable quil faut retenir de ces expriences est, plus une erreur est dtecte tard et plus le cot de la correction sera lev !

Les 5% de bogues dcouverts aprs release reprsentent 95% des cots de correction.

Avant CI

The Integration Hell !

Avant CI

Big bang integration

Avant CI

Frequent integration

Intgration continue

Martin Fowler:
team integrate their work frequently, leading to multiple integrations per day. this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. Continuous integration involves integrating early and often, so as to avoid the pitfalls of "integration hell". The practice aims to reduce rework and thus reduce cost and time.

Cest Quoi?

"L'intgration continue est un ensemble de pratiques utilises en gnie logiciel. Elles consistent vrifier chaque modification de code source que le rsultat des modifications ne produit pas de rgression de l'application en cours de dveloppement."
Wikipedia

"Une pratique considrant diffremment l'intgration, habituellement connue comme pnible et peu frquente, pour en faire une tche simple faisant partie intgrante de l'activit quotidienne d'un dveloppeur."
Documentation CruiseControl.NET

10

Cest Quoi?

Lintgration continue, dans sa forme la plus simple, consiste un outil qui surveille votre systme de contrle de version pour les changements. Chaque fois qu'un changement est dtect, cet outil compile et teste automatiquement votre application. Si quelque chose va mal, l'outil informe immdiatement les dveloppeurs afin qu'ils puissent rsoudre le problme immdiatement. "
John Furguson Smart Director of Wakaleo Consulting

Mais l'intgration continue peut faire beaucoup plus que cela!

11

Comment cela fonctionne?

Mentalit

(ensemble de pratiques agile (ex. XP)) Plus des outils

schma de dveloppement classique :


Spcifications Dveloppem ent Intgration

schma de dveloppement Intgration continue :


Spcifications Dveloppement Intgration

12

Comment cela fonctionne?

Avant la mise en place de lintgration continue :

Aprs la mise en place de lintgration continue :

13

Comment cela fonctionne?

Avant la mise en place de lintgration continue :

Aprs la mise en place de lintgration continue :

14

Continious Integration

ES PRATIQUES DU CI
lIntgration Continue est une mthode agile. Elle fait partie des 12 mthodes de lXP. Elle se base sur les principes agiles suivants :

Fabriquer souvent (build) Tester souvent (test) Intgrer souvent (integrate)

15

XP:Principes

puisque la revue de code est une bonne pratique, elle sera faite en permanence (par un binme) ; puisque les tests sont utiles, ils seront faits systmatiquement avant chaque mise en uvre ; puisque la conception est importante, elle sera faite tout au long du projet (refactoring) ; puisque la simplicit permet d'avancer plus vite, nous choisirons toujours la solution la plus simple ; puisque la comprhension est importante, nous dfinirons et ferons voluer ensemble des mtaphores ; puisque l'intgration des modifications est cruciale, nous l'effectuerons plusieurs fois par jour ; puisque les besoins voluent vite, nous ferons des cycles de dveloppement trs rapides pour nous adapter au changement.

16

Pratiques du CI

Continuous Integration is a mindset as much as a toolset !

L'intgration continue est un pratiques et un ensemble d'outils.

ensemble

de

Pour tirer le meilleur parti de CI, une quipe a besoin d'adopter une mentalit CI.
Cette mentalit CI peut tre mise en uvre travers les pratiques suivantes:

17

Pratiques du CI

Les projets doivent avoir un processus de construction fiable,

reproductible

et

automatise,

n'impliquant

aucune

intervention humaine.

Maintenir un dpt unique de code source versionn .

Automatiser les compilations.


Le processus de dploiement devrait tre automatis, sans tapes manuelles impliques.

Rendre les compilations auto-testantes. Tout le monde commit tous les jours. La fixation des builds qui ont chou devrait prendre une priorit absolue, et ne pas tre laisse stagner.

18

Pratiques du CI

tout commit doit compiler le tronc (trunk) sur une machine

d'intgration ;

maintenir une compilation courte ; tester dans un environnement de production clon Dfi lapport des tests dintgration

rendre disponible facilement le dernier excutable. tout le monde doit voir ce qui se passe. automatiser le dploiement. Et puisque la confiance que vous placez dans votre serveur CI

dpend dans une large mesure de la qualit de vos tests,


l'quipe a besoin de placer un accent trs fort sur les tests de haute qualit et les bonnes pratiques de tests.

19

Continious Integration

Les Outils du CI

20

Architecure

Architecture dune chaine dintgration

Gestionnaire de Build

Gestionnaire de tests

CI

Gestionnaire de SCM

Serveur dintgration continue

Outils dinspection

Gestionnaire de notifications

Architecture dune chaine dintgration

SCM 21 Source control managemet

Gestionnaire de Build

Gestionnaire de tests

SCM

Gestionnaire de SCM

Serveur dintgration continue

Outils dinspection

Gestionnaire de notifications

SCM PRE REQUIS INDISPENSABLE

SCM 22 Source control managemet

Fonctions basiques d'un SCM

Maintenir un dpt contenant le code source de tous les dveloppeurs: repository Ajouter des fichiers ou modifications de fichiers : commit Rcuprer un projet : checkout (ou clone) Rcuprer des modifications d'autres branches et (tenter de) les appliquer: merge (Sauve)garder l'historique d'un projet et y accder facilement. Revenir en arrire : revert Un dveloppement collaboratif en minimisant les conflits entre les modifications de chaque dveloppeur.

SCM 23 Source control managemet

Exemples de SCM
CVS,

SVN, GNU Arch . Git, Mercurial, Bazaar Etc.

SCM 24 Source control managemet

Utilisez un systme quelconque de SCM Faire du versionning des fichiers, presque par dfinition.
il y a un autre concept moins frquemment utiliss dans la pratique Le branching.

Mais

Le branching
Changes
CHECK OUT

SCM 25 Source control managemet

CHECK IN
BRANCH

BRANCHING

MERGE

To release

Repo
CHECK OUT

Main Line / TRUNK


CHECK IN (Commit) UPDATE

Changes
Code/build/tests

Changes

26

SCM Source control managemet


Mercurial / Git

Repo

CVS/SVN

Repo

Repo

Repo

Local workspace

Local workspace

Local workspace

Local workspace

27

Outils de build

Architecture dune chaine dintgration

Gestionnaire de Build

Gestionnaire de tests

Outils de BUILD

Gestionnaire de SCM

Serveur dintgration continue

Outils dinspection

Gestionnaire de notifications

Le build au coeur des concepts de lIC

28

Outils de build

Le build au coeur des concepts de lIC, Pas une simple compilation. En ralit, il ny a pas de dfinition prcise! On trouve en gnral les tches suivantes dans un build :
1. 2. 3. 4. 5.

6.
7. 8.

Chargement de la dernire version du projet depuis le SCM; Compilation ; Excution des tests unitaires ; Inspection du code (en vue de gnrer les mtriques de qualit) ; Construction des releases (JAR, WAR, EAR) ; Dploiement de lapplication sur l'environnement de dveloppement Excution des tests d'intgration ; Gnration de la documentation, des rapports, des notes de release (par exemple la Javadoc ou les rapports Maven).

29

Outils de build

Ant NAnt Maven Make

Phing
Rake Etc.

30

Outils de Test

Architecture dune chaine dintgration

Gestionnaire de Build

Gestionnaire de tests

Outils de Test

Gestionnaire de SCM

Serveur dintgration continue

Outils dinspection

Gestionnaire de notifications

Le build au coeur des concepts de lIC

31

Les Tests?

Les tests de type white box


Les tests unitaires Les tests dintgration Les tests de performance Les tests de qualit

32

Les Tests?

Les tests de type black box


Les tests fonctionnels Les tests de monte en charge Les tests de non-rgression

33

Outils de tests

Arquillian; Jbehave; Junit NUnit CppUnit PHPUnit SimpleTest JSUnit J3Unit

Mock

object ; Selenium; Et la Famille Xunit Etc.

34

Outils dinspection

Architecture dune chaine dintgration

Gestionnaire de Build

Gestionnaire de tests

Outils dinspection

Gestionnaire de SCM

Serveur dintgration continue

Outils dinspection

Gestionnaire de notifications

Les outils de qualimtrie

35

Outils dinspection

Inspecter Quoi?

Taille du code trop grande ; Lisibilit du code (cohrence du style de nommage, organisation des sources : rendre une copie propre) ; Documentation (prsence de la Javadoc) ; Respect des rgles de paquetages, de modularit, de dpendances et darchitecture en couches ;

Test et couverture de test ;


Les copier-coller ; Respect des rgles de programmation. Etc.

36

Outils dinspection

Avec ces outils, on cherche amliorer le code, et plus particulirement sa :


Usabilit

/ Lisibilit ; Maintenabilit ; Efficacit / Performance ; Portabilit ; Fiabilit ; Testabilit.

37

Exemples doutils de qualimtrie

Couverture de tests: Cobertura : Calcule le pourcentage du code accessible par les tests Clover : Calcule des mtriques sur la couverture des tests Etc. Qualit du code: CheckStyle : effectue l'analyse statique de style de code PMD/CPD effectue une analyse du code source Java et dtecte le Copier / Coller FindBugs : effectue une analyse de code source Java pour dtecter les tendances de bugs JDepend : calcule des mtriques de qualit de conception par paquet Taglist : effectue une analyse statique de code pour trouver les balises dans le code, comme @todo ou des tiquettes / / TODO. Etc.

38

Outils dinspection couverture des tests

Cobertura
Atlassian jTest

Clover

JCoverage
CodeCover EMMA

Parasoft
Ncover Xdebug

Insure++

Coverage.py

39

Reporting

Code coverage analysis Static analysis (syntax check, code dependencies) Copy/paste detectors

40

Sonar

41

Serveur dintgration continue

Architecture dune chaine dintgration

Gestionnaire de Build

Gestionnaire de tests

Serveur dintgration continue

Gestionnaire de SCM

Serveur dintgration continue

Outils dinspection

Gestionnaire de notifications

Le chef dorchestre

42

Serveur dintgration continue

La place du serveur dIC est centrale dans la chane car cest lui qui lancera loutil de build Rendre lIC autonome et indpendante du poste du dveloppeur En entre il pourra par exemple recevoir de la gestion de configuration un vnement indiquant que les sources ont t modifies. Cet vnement pourra alors dclencher les lancement de la chane. Il pourra remplir dautre tches comme envoyer un mail une ou plusieurs personnes pour prvenir au cas o une erreur surviendrait dans le droulement de la chane.

43

Serveur dintgration continue

CruiseControl

CruiseControl.NET
CruiseControl.rb JetBrains TeamCity Apache Hudson/Jenkins Apache Continuum

Atlassian Bamboo
FinalBuilder

phpUnderControl
XInc

44

45

Cas dutilisation

# Cas N1 Le dveloppeur soumet une modification


4 Build + Tests
$ Gcc c *.c o test Compiling Compilation Sucessfull Testing Junit tests OK Integration tests OK Performance tests OK Code Inspection 86% Deploying in test environnement OK

5 Dploiement

Serveur de test

6 Notification

Serveur dintgration
3 Update 2

Serveur de recette

Vrification des modifs

Postes de dev

1 Commit

Serveur de production

SCM

46

Cas dutilisation

# Cas N2

47

Intgration Continue

SYNTHESE

48

Phases du CI

Continuous Integration is not an all-or-nothing affair.

Lintgration continue n'est pas une affaire de tout ou rien .


L'introduction de CI dans une organisation vous emmne sur un chemin qui progresse travers plusieurs phases distinctes. Chacune de ces phases implique des amliorations progressives l'infrastructure technique ainsi que des amliorations dans les pratiques et la culture de l'quipe de dveloppement lui-mme .

49

Phases du CI
Phase6 Automated Phase5 Acceptance Tests Getting More and More Serious About Automated Testing Deployment

Phase1 No Build Server

Phase 2 Nightly Builds

Phase3 Nightly Builds and Basic Automated Tests

Phase4 Enter the Metrics

Phase7 Continuous Deployment

SCM Builds planifi Outils Tests TDD Seulement les nuits, unitaires/ dinspection Tests non intgrations obligatoirs obligatoirs & Notification par mail

ATDD & BDD language Ubiquitaire

Dployer les nouvelles modofications dans la production

50

CONCLUSION

Communication et Stratgie

Pour que le projet dintgration continue russisse, il faudra limplication de tous.

Lintgration continue est un concept relativement nouveau.


Il faut sensibiliser les membres de lquipe. Il ne suffit pas de disposer doutils trs performants pour savoir les utiliser bon escient.

51

CONCLUSION

Pourquoi ne pas prendre lintgration continue comme un jeu?

Une sorte de rituel divertissant.

Celui qui casse le build de nuit amne les croissants pour lquipe
Les dveloppeurs perdent ou gagnent des points en fonction des rsultats des builds et de lorigine des erreurs.

52

Ce quil faut retenir !

Le CI et un processus et pas un outil. Importance de la communication Un processus sur mesure. Dvelopper mieux, plus rapidement, un cot moins lev et avec plus de confiance : better, faster, cheaper.

Better

On construit des builds de meilleure qualit. On teste souvent et en amont (early & often). On respecte les bonnes pratiques et les conventions de codage.

Faster

Les tests sont excuts paralllement au dveloppement, pas la fin. Il ny a plus de point dintgration. La construction dun build ne devient plus un vnement.
On identifie les dfauts en amont. On les rsout quand il cote le moins cher. Le test devient facile et rptable.

Cheaper

53

Rfrences & Illustrations

Rfrences

IC, Amliorer la qualit des logiciels et rduire les risques - By Fabian Piau http://www.scribd.com/doc/445931/Principes-delintegration-Continue http://fr.wikipedia.org/wiki/Intgration_continue

Illustrations

IC, Amliorer la qualit des logiciels et rduire les risques By Fabian Piau http://www.bradapp.com/acme/branching/streamedlines.html

Lintgration continue

Continuous Integration
Presented by Wael ANIBA - UP JEE @ESPRIT - wael.aniba@esprit.tn