Pulse de zutubi :
Gauntlet est limité aux gestionnaires de sources (SCM) CVS, SVN et Starteam. Il propose le mécanisme de sandbox, à savoir une branche privée du SCM pour chaque développeur. Les commits se font dans cet espace tampon, où se déroule un build (compilation, tests... ce que vous voulez) et si tout se passe bien, le code est promu automatiquement sur la branche principale et sur toutes les sandbox. Si par contre, il y a un problème, le fichier est locké le temps que les corrections soient apportées. Attention, il ne gère que Ant, Maven n'est mentionné nulle part !
Pulse gère CVS, SVN et perforce. Son fonctionnement est légèrement différent : Le développeur soumet via une ligne de commande un personal build au serveur pulse. Techniquement, la commande fait un update du code en local, analyse les différences et soumet un patch au serveur. Le serveur utilise le code courant du SCM (dans un espace temporaire) auquel il ajoute le patch puis exécute un build. On choisit ensuite de commiter ou non le code en fonction du résultat du build.
Enfin, TeamCity m'a semblé plus complet, de par la gestion de multiples SCM ainsi que pour son intégration aux principaux environnements de développements (IDE). Malheureusement, le build personnel ne fonctionne pas avec tous les SCM sur tous les IDE et pas moyen de faire autrement que de passer par l'IDE : sur Eclipse, seul SVN est géré; IntelliJ est mieux servi avec Subversion, Perforce, CVS, Visual SourceSafe, ClearCase, StarTeam et enfin Visual Studio fonctionne avec TFS et SVN. Le fonctionnement est assez semblable à pulse.
On s'écarte quelque peu de l'intégration continue à proprement parler mais certains SCM tentent également d'apporter une solution pour disposer constamment d'un code qui compile :
Rational Clearcase UCM fournit un mécanisme de vues : chaque développeur code sur une vue (sorte de branche) qui lui est propre. Il peut commiter toutes les erreurs qu'il veut, ce code ne concerne que lui. Pratique pour ne pas déranger les autres pendant le développement. Mais au moment d'intégrer son code à la baseline (branche) principale, c'est une autre histoire, l'intégration continue étant généralement branché sur cette baseline.
Git et Mercurial, pour les plus connus, sont des gestionnaires de sources distribués, qui permettent de faire une copie du référentiel (équivalent au checkout en svn) et continuer à travailler sur une sorte de branche personnelle avant de merger avec le référentiel parent. On peut donc imaginer le schéma suivant :
Même si les builds peuvent échouer sur l'intégration continue, le code dans le référentiel principal est censé compiler (éprouvé par l'usine de développement) et donc permettre de disposer d'une version opérationnelle de l'application.
Il n'existe pas aujourd'hui de solution miracle (gestion de tous les SCM ou SCM lui même adapté pour ce genre de choses) mais si c'est une volonté forte de conserver un gestionnaire de source "propre", mieux vaut disposer du bon outil au départ (SVN par exemple semble bien intégré à la plupart des serveurs d'intégration continue que nous venons de voir).
Dans la 3ème et dernière partie, je traiterai un sujet moins technique : l'industrialisation de cette pratique et comment l'exploiter pleinement depuis le développement jusqu'au déploiement.