jeudi 10 juin 2010

Intégration continue avec Hudson et Maven

Environnement


Avant de donner la recette pour la mise en oeuvre de hudson, nous
allons donner quelques définitions. En effet, certains termes
utilisé dans ce document ont un sens variable suivant le
contexte.

Précisons d'abord les rôles des différents
environnements :

  • Environnement d'Intégration : sert à
    valider manuellement que le le comportement du produit est
    identique sur les environnements de développement et sur la
    plateforme cible. L'environnement d'intégration doit être
    un clone des plateformes de production.

  • Environnement Intégration continue : sert à
    valider automatiquement que le le comportement du produit est
    identique sur les environnements de développement et sur la
    plateforme cible. L'environnement d'intégration doit être
    un clone des plateformes de production.

  • Environnement de Validation :
    sert à vérifier
    que le produit est conforme aux spécifications.


Jeu de test :
Ensemble de données nécessaires au passage d'un test

Test unitaire : Théoriquement
il s'agit d'un test vérifiant une exigence, mais dans ce
document, nous l'utiliserons dans son acception consacrée
test
Junit
.

Bénéfices de l'intégration
continue


Dans les configurations de développement JAVA« standard »,
le codage s'effectue sur Windows et l'intégration s'effectue
sur LINUX/UNIX, il est donc fréquent d'avoir des surprises au
moment de passer sur l'environnement cible, les environnements
d'intégration permettent anticiper les problèmes
techniques.
L'intégrateur identifie les dysfonctionnements et les
corrige. Malheureusement, dans la plupart des configurations projet,
personne n'étant affecté exclusivement à
l'intégration et les soucis d'intégration tendent à
être reléguées aux dernières tâches.

Au delà de l'effet de mode, le principal bienfait de
l'intégration continue sera d'améliorer la visibilité
de ces problématiques.
L’intégration continue valide automatiquement le
produit sur la plateforme cible.


  • Permet de détecter au plus tôt les problèmes
    de dépendance aux environnements : File System, Encoding,
    Case-sensitive, performances etc.
  • Permet de lisser le stress dans l'équipe (plus de
    pression dans les phases précoces, moins au moment de la
    livraison)

  • Il donne une aperçu de la qualité du produit au
    chef de projet et donne confiance au moment de la livraison
    .

Impacts structurants de l'intégration
continue


Contraintes de codage


L'ensemble des projets sur le référentiel de source
doit être compilable à tout moment.

Pour l'intégration continue, le développeur est
contraint d'écrire des tests unitaires.

Test unitaires

Dans un monde systématique, chaque exigence devrait être
vérifiée par un test unitaire, inversement, chaque test
unitaire devrait se mettre en relation avec une seule exigence.
Cependant, dans le monde réel, un test unitaire pourra être
associé à plusieurs exigences, une exigence pourra
n'être pas couverte... etc. In fine le développeur
arbitrera (mais avec un minimum d'expérience, cela se passe
bien. )
A chaque TU est associé un jeu de tests, mais aucune
hypothèse de données préalable ne peut être
faite. Que l'on parte d'une base totalement vidangée ou pleine
de donnée, le résultat du test unitaire doit être
le même. D'autre part, le séquence des TU ne doit pas
non plus conditionner le résultat.

Ressources



  • L’intégration
    requiert un serveur dédié pour hudson
  • Il faut une base de données
    par utilisateur

    (Elle peux se situer sur la machine de
    développement ou sur un serveur mutualisé)

Contrainte de conception



  • Il faut utiliser maven pour
    l'assemblage
  • Les test unitaires doivent être
    écrit avec Junit

Au quotidien



  • Il faut vraiment s’impliquer
    dans la supervision des builds et être vigilant tout au long
    du développement du produit : codage, intégration,
    validation
  • L'équipe doit s'organiser
    dans ce but, c'est-à-dire qu'il faut un responsable
    Intégration Continue (le même que le responsable GCONF)


Mise en oeuvre




  • Installer un serveur hudson
  • Planifier les tâches à des horaires où la
    machine n'est pas trop chargée

De The French Hack

De The French Hack

De The French Hack