50
Mardi gras: Intégration Continue Présenté par Xavier Bourguignon ([email protected])

Mardi Gras 'Intégration Continue

Embed Size (px)

DESCRIPTION

Présentation faites le 19 Mars 2009

Citation preview

Page 1: Mardi Gras 'Intégration Continue

Mardi gras: Intégration Continue

Présenté par Xavier Bourguignon ([email protected])

Page 2: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 220/03/2009

Sommaire

Histoires (pas drôles) de projets sans intégration continue

Historique et objectif

Principes

Bonnes pratiques

Comparatif de Apache Continuum, Hudson et Atlassian Bamboo

Retour d'expérience sur Hudson

Quels gains attendre de la mise en place de l'intégration continue ?

Questions

Page 3: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 320/03/2009

Terminologie utilisée

BuildEnsemble des étapes nécessaires à la création du livrable d'un projet

Compilation, tests, packaging, …

CommitOpération de validation des modifications réalisées dans le répertoire de travail local et de propagation dans le gestionnaire de source d'où il est issu.

UpdateOpération de mise à jour du répertoire de travail local à partir du gestionnaire de source.

CheckoutOpération d'extraction d'une version d'un projet du gestionnaire de source vers un répertoire de travail local.

Page 4: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 420/03/2009

Terminologie

Branche

Page 5: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 520/03/2009

Histoires (pas drôles) de projets sans intégration continue

Un projet comme on en vit tous les joursle syndrôme du 'je comprends pas, ça marche sur mon poste !'

• commits partiels

• fichiers de configuration dépendants du poste de travail

Résultat: équipe régulièrement bloquée ½ journée

Un cas plus difficileProjet .Net, 25 personnes

Sur au moins 3 releases : Impossible de faire le build pour l'équipe de test. Perte : 1 journée avec 6 personnes en attente et 2 dév pour reprendre les commits 1 par 1.

Sur au moins 2 releases : Build ok. Livraison équipe de test. 2 jours de tests (6 p) et bug bloquant. Livraison en urgence d'un patch et commit. Release après une semaine de test et build passe pas. 2 jours de reprise du patch pour 2 dev. 2 jours équipe de test au chômage technique. Ensemble des tests de la semaine à repasser car pas confiance dans la constitution de la version précédente.

Résultat: 42 jours/h perdus.

Page 6: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 620/03/2009

Histoires (pas drôles) de projets sans intégration continue

Waterloo ...Projet Java, 60 développeurs:

6 mois de développement.

3 tentatives pour faire une release se soldant par un échec.

Décision: constituer une équipe de 6 personnes pour effectuer cette tâche !

Résultat: 2 ans de retard.

Constat

Plus une erreur est détectée tard et plus le coût de correction est élevé !

1 X

6,5 X

15 X

100 X

Conception Réalisation ValidationDéploiementExploitation

Sour

ces

Gartn

er /

IBM

2003

0

5

10

15

20

Etudes

Réalisati

on

Integratio

n

Pré-pr

oduction

Exploit

ation

Nombre d’heures requises pour corriger une anomalies – à partir du moment où elle est détectée

Source : http://www.nist.gov

Page 7: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 720/03/2009

Historique et Objectif

L'intégration Continue n'est pas un outil, mais une pratique issue de XP.

Déjà pratiqué par IBM dans les années 60 pour le développement de OS/360.

Objectif:Vérifier de façon automatique et à chaque modification de code source que le résultat des modifications ne produit pas de régression de l'application en cours de développement

Avantages: prévient rapidement en cas de code incompatible ou manquant

test immédiat des unités modifiées

les problèmes d'intégration sont détectés et réparés de façon continue, évitant les problèmes de dernière minute

une version est toujours disponible pour test, démonstration ou distribution.

Page 8: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 820/03/2009

Principes définis par Martin Fowler

Maintenir un dépôt unique de code source versionné

Automatiser les compilations

Rendre les compilations auto-testantes

Tout le monde committe tous les jours

Tout commit doit compiler la branche principale sur une machine d'intégration

Maintenir une compilation courte

Tester dans un environnement de production cloné

Rendre disponible facilement le dernier exécutable

Tout le monde doit voir ce qui se passe

Automatiser le déploiement

Page 9: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 920/03/2009

Bonnes pratiques sur le plan technique

Séparer en 2 jobs: continuous build : déclenché à chaque commit, compilation + tests unitaires.

10 mn maximum

nightly build : déclenché à heure fixe toutes les nuits, compilation, test unitaires, rapports de qualité (PMD, Checkstyle), packaging, déploiement sur plateforme de dév, tests fonctionnels

Une livraison à effectuer: un job spécifique : déclenché manuellement, compilation, tests unitaires, rapports

de qualités, packaging, déploiement sur plateforme de recette, tests fonctionnels

Faire l'intégration continue de la base de données.

Installer la solution d'intégration continue sur un serveur dédié.

Page 10: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1020/03/2009

Bonnes pratiques sur le plan humain

Définir des règles comportementales: que faire quand un build échoue ?

que faire avant et après un commit ?

Seul ceux qui ne commit pas ne peuvent pas casser le build ! Il est normal de casser le build de temps en temps, mais il n'est pas normal de le laisser casser

Annoncer à l'équipe que vous avez cassé le build et que vous vous en occupez

Ne doit pas être utilisé pour stigmatiser, mais pour responsabiliser !L'intégration continue est une sécurité pour le développeur

Installer un rituel divertissant pour motiver les développeurs à faire attention au build

Celui qui casse le build de nuit amène les croissants pour l'équipe

Mettre en place le jeu de l'intégration continue

Page 11: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1120/03/2009

Bonnes pratiques pour la mise en place

Commencer petitMise en place de l'infrastructure, de l'intégration continue

Simple mais qui fonctionne

Avoir 1 ou 2 projets pilotesPermet d'affiner la plateforme et le discours

Préparation à accueillir de nouveaux projets

CommuniquerCommuniquer sur les intérêts pour que tout le monde sache que cela existe

Donner du support: guide d'utilisation, bonnes pratiques, aide à mettre en place

Le nombre de projets commence à être conséquent, le serveur ne tient plus la charge

Envisager la mise en cluster, le build distribué

Page 12: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1220/03/2009

Comparatif de Apache Continuum, Hudson et Atlassian Bamboo

Open Source et gratuit

Soutenu par la fondation Apache

1ère version en 2005, dernière version 1.2.3

Open Source et gratuit

Kohsuke Kawaguchi, employé par SUN

1ère version en 2007, dernière version 1.292

Open Source et Payant (1200 à 8000$ selon version)

Atlassian (JIRA, Confluence)

1ère version en 2007, dernière version 2.2

Page 13: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1320/03/2009

Comparatif de Apache Continuum, Hudson et Atlassian Bamboo

Les axes de comparaison:L'ergonomie

L'installation et la configuration

Les gestionnaires de sources supportés

Les types de builds supportés

Les systèmes de notifications supportés

Les rapports de tests et de qualités supportés

L'intégration avec d'autres outils

Les capacités de répartition de charge

Page 14: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1420/03/2009

Page 15: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1520/03/2009

Page 16: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1620/03/2009

Page 17: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1720/03/2009

Page 18: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1820/03/2009

Page 19: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 1920/03/2009

Page 20: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2020/03/2009

Page 21: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2120/03/2009

Page 22: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2220/03/2009

Page 23: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2320/03/2009

Page 24: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2420/03/2009

Page 25: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2520/03/2009

Installation et configuration

Standalone ✔ ✔ ✔

Webapp ✔ ✔ ✔

Base de données

DerbyMySql

MS SQL ServerOracle (en cours)

n/a PostgresMySql

MS SQL ServerOracle

ConfigurationFichier XML

Interface WebInterface Web Interface Web

Page 26: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2620/03/2009

Gestionnaire de sources supportés

Bamboo

ClearCase ✔ ✔ (plugin) ✔

CVS ✔ ✔ ✔

Git ✔ (plugin)

Mercurial ✔ ✔ (plugin) ✔

Perforce ✔ ✔ (plugin) ✔

PVCS ✔ (plugin)

Subversion ✔ ✔ ✔

Team Foundation Server

✔ (plugin)

Visual Source Safe ✔ ✔ (plugin)

Page 27: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2720/03/2009

Types de build supportés

Bamboo

Ant ✔ ✔ ✔

Ligne de commande (sh ou bat)

✔ ✔ ✔

Maven ✔ ✔ ✔

NAnt ✔ (plugin) ✔

MsBuild ✔ (plugin) ✔

Rake (Ruby) ✔ (plugin)

Phing (PHP) ✔ (plugin)

Page 28: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2820/03/2009

Système de notification supportés

Bamboo

Email ✔ ✔ ✔

Jabber ✔ ✔ ✔

MSN ✔

Nabaztag ✔ (plugin)

RSS ✔ ✔

Sametime ✔ (plugin)

System Tray ✔ (plugin)

Twitter ✔ (plugin)

Page 29: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 2920/03/2009

Notre Nabaztag

Page 30: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3020/03/2009

Rapports de test et de qualités supportés

JUnit ✔ ✔ ✔

PHPUnit ✔

NUnit ✔ (plugin) ✔

TestNG ✔ ✔

MsTest ✔ (plugin) ✔

PMD ✔ (plugin)

CheckStyle ✔ (plugin)

FindBugs ✔ (plugin)

Sonar ✔ (plugin)

Clover ✔ (plugin) ✔

Cobertura ✔ (plugin)

Emma ✔ (plugin)

Page 31: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3120/03/2009

Page 32: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3220/03/2009

Page 33: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3320/03/2009

Page 34: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3420/03/2009

Intégration avec d'autres outils

Eclipse ✔ (plugin)

Intellij IDEA ✔ (plugin) ✔ (plugin)

Netbeans ✔ (plugin)

Visual Studio

JIRA ✔ (plugin) ✔

Mantis Bug Tracker ✔ (plugin)

Selenium ✔ (plugin)

Borland SilkCentral Test Manager

✔ (plugin)

FishEye ✔ ✔

Sventon ✔

ViewCVS ✔

Page 35: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3520/03/2009

Atlassian IDE Connector

Page 36: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3620/03/2009

Intégration de Hudson et Netbeans

Page 37: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3720/03/2009

Intégration de Hudson et JIRA

Page 38: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3820/03/2009

Répartition de la charge

Principe : des agents installés sur d’autres serveurs prennent à leur charge certains builds et

fournissent le résultat au serveur principal.

Fonctionnalité disponible avec les 3 outils- en version alpha pour Continuum

- avec Hudson, on spécifie quel build sur quel agent pour équilibrer la charge

- Bamboo distribue les builds en fonction des compatibilités entre le build et l'agent (jdk 1.4 sur un agent, 1.5 sur un autre)

- agent sur des instances Amazon EC2 avec la version 2.2 de Bamboo

Agent 1

Agent 2

Agent 3

Projet A

Projet B

Projet C

Master

Page 39: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 3920/03/2009

Avantages et inconvénients de chaque solution

support de Maven (prepare et perform release depuis l'interface web)

build distribué en version alpha

les plugins (plus de 100 disponibles)

file fingerprint (marquage des jars pour suivre leur utilisation par d'autres builds)

external jobs (possibilités de monitorer des jobs externes)

release très fréquentes (trop ?)

intégration avec les produits Atlassian (JIRA, FishEye, Clover)

intégration dans Intellij IDEA

support Atlassian

payant

Page 40: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4020/03/2009

File fingerprint

Page 41: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4120/03/2009

Retour d'expérience sur Hudson

Contexte:Une équipe de 10 développeurs pendant 2 ans.

Reprise du code d'un projet très similaire.

Un serveur dédié 'devFactory' avec: Hudson

Mantis Bug Tracker

Sventon

Subversion

Un serveur avec 2 environnements: Test, mis à jour toutes les nuits

Recette, mis à jour à chaque release

Page 42: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4220/03/2009

Retour d'expérience sur Hudson

3 types de builds mis en place:Continuous Build:

compilation et tests unitaires

exécuté à chaque commit sur la branche principale

durée: 9mn

Nightly Build:

compilation, tests unitaires, rapports qualités, packaging, déploiement en environnement de test, tests fonctionnels,

exécuté toutes les nuits à 23h sur la branche principale

durée: 1h

Release Build:

compilation, tests unitaires,packaging, déploiement en environnement de test, tests fonctionnels,

exécuté manuellement sur la branche de livraison

Durée: 40 mn

Script de livraison sur le FTP du client et tag sur la version livrée

Page 43: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4320/03/2009

Retour d'expérience sur Hudson, plugins utilisés

Batch Task, permet de lancer des scripts supplémentaires sur un build donné (transfert du livrable sur le FTP du client et tagging de la version livrée)

Page 44: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4420/03/2009

Retour d'expérience sur Hudson, plugins utilisés

Emma, FindBugs, Task Scanner, Warnings

Page 45: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4520/03/2009

Retour d'expérience sur Hudson, plugins utilisés

Mantis

Page 46: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4620/03/2009

Retour d'expérience sur Hudson, plugins utilisés

Continuous Integration Game, pour faire adhérer l'équipe (+1 point par build ok, -10 pour un build cassé, +4 pour un nouveau test qui passe, -4 pour un test en erreur)

Page 47: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4720/03/2009

Retour d'expérience sur Hudson, plugins utilisés

Disk Usage, pour suivre la consommation d'espace disque de chaque job

Page 48: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4820/03/2009

Retour d'expérience sur Hudson

Les difficultés rencontrées:L'intégration continue de la base de données

Les commits à la sauvette en fin de journée sans vérifier le résultat

1ère livraison difficile: développement sous windows, déploiement sous Solaris

Tentative de stigmatisation des casseurs de build par le management

Les succès:Jamais l'équipe n'a rencontré le syndrome 'je comprends pas, ça marche sur mon poste'

Plus de problème d'intégration après la 1ère livraison car passage de l'environnement de test sous Solaris.

Processus de livraison automatisé

Les développeurs juniors n'imaginent pas une seconde faire un projet sans IC

Page 49: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 4920/03/2009

Quels gains attendre de la pratique de l'intégration continue ?

Le coût de mise en place:Installer la plateforme 1 à 2 jours (si sécurité)

'Maven-iser' ou 'Ant-iser' un projet 1 à 2 jours

Faire une documentation 1 jour

Offrir du support 20% d'une personne

Les gains:Selon IBM, vos développements seront 60% plus rapides et vous en réduirez les coûts de 25 %

Syndrome du 'ça marche chez moi !' ½ journée par équipe et par quinzaine

Cas difficile 42 jours maximum

Waterloo 1 an ?

Mais vous gagnerez surtout en sérénité et en visibilité !

Page 50: Mardi Gras 'Intégration Continue

Mardi gras 'Intégration Continue' 5020/03/2009

Questions ?