Introduction À L'intégration Continue (Continious Integration)
Introduction À L'intégration Continue (Continious Integration)
Introduction À L'intégration Continue (Continious Integration)
Continuous Integration
Presented by Wael ANIBA - UP JEE @ESPRIT - 2013/2014 - wael.aniba@esprit.tn
Problmatique?
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
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.
SCM
Source control managemet
Changes
CHECK OUT
CHECK IN
BRANCH
BRANCHING MERGE
To release
Repo
CHECK OUT
UPDATE Changes
Changes
Code/build/tests
Repo
Repo
Repo
Local workspace
Local workspace
Local workspace
Local workspace
Les Tests?
Les tests unitaires Les tests dintgration Les tests de performance Les tests de qualit
Les Tests?
Les tests fonctionnels Les tests de monte en charge Les tests de non-rgression
Intgration
Intgration
Intgration
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.
Une
Pratiques
maintenir un dpt unique de code source versionn ; automatiser les compilations ; rendre les compilations auto-testantes ; tout le monde commit tous les jours ; tout commit doit compiler le tronc (trunk) sur une machine d'intgration ; maintenir une compilation courte ; tester dans un environnement de production clon ; rendre disponible facilement le dernier excutable ; tout le monde doit voir ce qui se passe ; automatiser le dploiement.
14
Pratiques
Architecture dun logiciel dintgration
Gestionnaire de Build
Gestionnaire de tests
Gestionnaire de SCM
Gestionnaire de notifications
Outils de build
Ant
NAnt
Maven
Make
Phing
Rake
Outils de CI
CruiseControl CruiseControl.NET CruiseControl.rb JetBrains TeamCity Apache Hudson Apache Continuum Atlassian Bamboo FinalBuilder phpUnderControl XInc
PHPUnit
SimpleTest
JSUnit
J3Unit
Cobertura Atlassian
Clover
jTest
JCoverage CodeCover
EMMA
Parasoft Ncover
Insure++
Xdebug
Coverage.py
Sonar
Cas dutilisation
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
Postes de dev
1 Commit
Serveur de production
SCM
Reporting
Code coverage analysis Static analysis (syntax check, code dependencies) Copy/paste detectors
Avantages
le
test immdiat des units modifies ; la prvention rapide en cas de code incompatible ou manquant ; les problmes d'intgration sont dtects et rpars de faon continue, vitant les problmes de dernire minute ; une version est toujours disponible pour un test, une dmonstration ou une distribution.