Intégration continue avec Continuum

de projets Maven 2

| Régis POUILLER | koala01 | Ricky81 |

Présentation de l'intégration continue sous Continuum de projets Maven2 : description de l'intégration continue, principe de fonctionnement de Continuum et utilisation de Continuum au travers de projets d'exemple.

Une discussion a été ouverte pour les commentaires sur la publication de cet article : [ Commentez ]

- Titre : Intégration continue avec Continuum

- Auteurs : Régis POUILLER, koala01, Ricky81

- Parution : 23 décembre 2009

- Mise à jour : 7 juillet 2010

- Licence : Copyright ® 2009 Régis POUILLER. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. INTRODUCTION

- I-A. Objectif

- I-B. Connaissances prérequises

- I-C. Versions des logiciels

- I-D. Autres ressources sur developpez.com

- II. PRESENTATION DE CONTINUUM

- II-A. Description de Continuum

- II-B. Fonctionnement de Continuum

- III. INSTALLATION DE L'EXEMPLE D'UTILISATION

- III-A. Java Development Kit

- III-B. Eclipse

- III-C. Tomcat

- III-D. Apache HTTP Server avec WebDAV

- III-E. Maven

- III-F. Continuum

- III-G. Subversion

- III-H. Subversive

- IV. CREATION DE PROJETS D'EXEMPLE SOUS ECLIPSE

- IV-A. Différents projets d'exemple

- IV-A-1. Structure des projets d'exemple

- IV-A-2. Contenu du fichier Maven pom.xml

- IV-A-3. Génération des fichiers d'Eclipse (.classpath et .project) grâce au fichier Maven pom.xml

- IV-A-4. Classe du projet

- IV-A-5. Cas de tests du projet

- IV-A-6. Implémentation des projets

- IV-A-6-a. Implémentation du projet "NeCompilePas"

- IV-A-6-b. Implémentation du projet "SansTests"

- IV-A-6-c. Implémentation du projet "TestsCompileKO"

- IV-A-6-d. Implémentation du projet "TestsKO"

- IV-A-6-e. Implémentation du projet "TestsOK"

- IV-A-6-f. Téléchargement des projets

- IV-B. Partage du projet sur Subversion

- IV-B-1. Choix de l'emplacement du référentiel Subversion

- IV-B-2. Commit du projet sur Subversion

- V. UTILISATION DE CONTINUUM (Connexion et paramétrage)

- V-A. Connexion à Continuum

- V-A-1. Première connexion à Continuum

- V-A-2. Connexions suivantes à Continuum

- V-B. Paramétrage

- V-B-1. Paramétrage des files d'attente

- V-B-2. Paramétrage des planifications

- V-B-3. Paramétrage des installations (outils/variables de construction)

- V-B-4. Paramétrage des environnements de construction

- V-B-5. Paramétrage des modèles de construction

- VI. UTILISATION DE CONTINUUM (Continuum en mode classique)

- VI-A. Création/suppression de groupes de projets

- VI-B. Ajout/suppression de projets

- VI-B-1. Ajout depuis la fonctionnalité générale

- VI-B-2. Ajout depuis un groupe de projets

- VI-C. Construire un projet

- VI-D. Construire tous les projets d'un groupe de projets

- VI-E. Releaser un projet

- VI-F. Modifier les définitions de construction d'un projet

- VI-G. Modifier les définitions de construction d'un groupe de projets

- VI-H. Ajout de notifications à un projet

- VI-I. Ajout de notifications à un groupe de projets

- VII. UTILISATION DE CONTINUUM (Continuum en mode distribué)

- VII-A. Intérêt de la construction en mode distribué

- VII-B. Fonctionnement en mode distribué

- VII-C. Installation d'un agent de construction

- VII-D. Paramétrage dans continuum

- VII-D-1. Activation des constructions distribuées

- VII-D-2. Paramétrage d'un agent de construction

- VII-D-3. Paramétrage d'un groupe d'agents de construction

- VII-D-4. Paramétrage d'un groupe d'agents de construction dans un environnement de construction et une définition de construction

- VII-D-5. Ajout et construction d'un projet avec un agent de construction

- VIII. REMERCIEMENTS

I - INTRODUCTION

I-A - Objectif

L'intégration continue consiste à vérifier régulièrement la validité de l'état de développement d'un projet.

Dans la pratique, les sources sont stockées sur un dépôt. Un logiciel d'intégration continue récupère la version en cours de développement du/des projet(s). Le minimum est de vérifier la bonne compilation du/des projet(s). Mais, un projet sous intégration continue doit normalement comporter des tests automatisés qui sont également lancés par le logiciel d'intégration continue.

L'intégration continue permet de garantir des tests réguliers du projet afin de repérer rapidement toutes anomalies ou régressions. Le projet gagne en réactivité (les erreurs sont détectées plus tôt) et en qualité (surtout si les tests sont de qualité, mais c'est un autre sujet).

L'article présentera Continuum en général, puis au travers de projets d'exemple, son utilisation.

I-B - Connaissances prérequises

Les connaissances prérequises pour une bonne compréhension de cet article sont :

- des notions de Java, tests unitaires en Java, Eclipse et installation de plugin sous Eclipse ;

- des notions sur Apache Server et WebDAV ;

- des notions de SCM (Software Configuration Management) ou gestion de configuration logicielle; et plus particulièrement SVN ;

- des notions sur Maven, son cycle de vie et son paramétrage.

I-C - Versions des logiciels

Pour la réalisation de cet article, les versions des outils (uniquement à titre indicatif pour les personnes souhaitant reproduire le déroulement de l'article) sont :

- Java Development Kit : 1.4.2 Update 19

- Java Development Kit : 6.0 Update 20

- Eclipse : developpement Java 3.5 Galileo SR2

- Tomcat : 6.0.26

- Apache HTTP Server : 2.2.15 Win32 without crypto

- Maven : 2.2.1 (zip)

- Continuum : 1.3.6 (war)

- Agent de contruction Continuum : Standalone 1.3.6 (zip)

- Apache Derby : 10.1.3.1 et Tools 10.1.3.1 (indiquée dans la page d'installation de continuum sous Tomcat)

- JavaMail : 1.4 et Java Activation Framework 1.1 (indiquée dans la page d'installation de continuum sous Tomcat)

- Subversion : 1.6.6

- Subversive : 0.7.8.I20090904-1300 (télécharger par la mise à jour des plugins à l'adresse : Subversive plug-in et Subversive SVN Connectors)

- JUnit : 4.8.1

I-D - Autres ressources sur developpez.com

SCM :

- FAQ SCM

- Introduction à CVS par Ricky81

- Installation et utilisation des clients CVS par TridenT

SVN :

- Partie Subversion FAQ SCM

- Installation de Subversion sur Windows par Eric Reboisson

- Utilisation de SVN avec Eclipse par Baptiste Wicht

- Subversion et Eclipse (Chapitre 15 de Développons en Java avec Eclipse) par Jean-Michel DOUDOUX

- Installer le support SVN dans Eclipse Ganymede par djo.mos

Maven :

- FAQ Maven

- Introduction à Maven 2 par John Ferguson Smart traduit par Denis Cabasson

- Présentation de Maven 2 par Denis Cabasson

- Utiliser Maven 2 par Matthieu Lux

- Les outils de gestion de la qualité d'un projet Java et leur intégration à Maven 2 par Antonio Gomes Rodrigues

- Créez le site de votre projet avec Maven 2 par Baptiste Wicht

Continuum :

- Partie sur Continuum de la FAQ Maven

Autres serveurs d'intégration continue :

- Cruise Control - Serveur d'intégration continue en Java par Loïc Mathieu

- L'intégration continue avec Hudson par Romain Linsolas

- Mise en place d'un serveur d'intégration continue avec TeamCity et Visual SVN Server par Philippe Vialatte

II - PRESENTATION DE CONTINUUM

II-A - Description de Continuum

Apache Continuum est un serveur d'intégration continue développé par la communauté Apache.

Les projets qui peuvent être intégrés sous Continuum sont des projets Maven 1, Maven 2, avec un script Ant ou avec un script shell.

Il permet de :

- récupérer les sources des projets depuis un SCM ;

- réaliser des constructions automatiques et les tests unitaires associés ;

- notifier l'état de chaque intégration ;

- releaser les projets ;

- générer des rapports sur les projets.

II-B - Fonctionnement de Continuum

Dans Continuum, les projets sont regroupés en groupes de projets. Il est possible de définir des notifications et des environnements de construction au niveau des groupes de projets.

Les projets ajoutés dans des groupes de projets peuvent être de type Maven 1, Maven 2, Ant ou Shell. Il est également possible de définir des notifications et des environnements de construction au niveau des projets. Ils comportent des constructions et des releases.

Une notification correspond à l'envoi d'informations (par mail, irc, jabber, msn ou wagon) sur les succès, les échecs, les erreurs ou les avertissements lors de la construction des projets.

Les environnements de construction, les modèles de construction, les planifications et les installations correspondent au paramétrage général de Continuum.

Une planification est définie selon une expression cron. Elle correspond au moment où sera réalisée une action. Elle est liée à une file d'attente.

Les constructions s'effectuent successivement dans une même file d'attente. Il est possible d'avoir plusieurs files d'attente et ainsi des constructions en parallèle.

Une installation correspond au chemin d'un outil de build (JDK, Maven 1, Maven 2 ou Ant) ou d'une variable d'environnement. La définition du chemin d'un outil de build permet de définir des outils de différentes versions (sans définition d'installation, Continuum utilise par défaut les variables d'environnement de type JAVA_HOME).

Une définition de construction correspond au lancement d'une construction avec certains paramètres (goals, arguments). Elle a une planification et utilise un environnement de construction.

Un environnement de construction regroupe des installations.

Un modèle de définition de la construction permet de regrouper des définitions de constructions. Lors de l'ajout d'un projet à un groupe de projets, il est possible de choisir un modèle de construction. Les définitions de construction que le modèle regroupe seront définies pour le projet.

III - INSTALLATION DE L'EXEMPLE D'UTILISATION

Compte tenu du niveau technique du sujet, les installations de Java Runtime Environment, d'Eclipse et de Tomcat ne seront pas détaillées. Les dossiers d'installation utilisés pour la rédaction de cet article sont donnés à titre indicatif.

III-A - Java Development Kit

Les dossiers d'installation utilisés pour la rédaction de cet article sont : "C:\j2sdk1.4.2_19" pour le JDK 1.4.2 et "C:\Program Files\Java\jdk1.6.0_20" pour le JDK 6.

Fixer la variable d'environnement "JAVA_HOME" avec le dossier d'installation du JDK 6.

III-B - Eclipse

Installer Eclipse en déployant le zip.

Le dossier d'installation utilisé pour la rédaction de cet article est : "C:\Program Files\eclipse".

III-C - Tomcat

Le dossier d'installation utilisé pour la rédaction de cet article est : "C:\Program Files\Apache Software Foundation\Tomcat 6.0".

III-D - Apache HTTP Server avec WebDAV

L'objet de cet article n'est pas la configuration d'Apache. C'est pour cela que la méthode d'utilisation d'Apache décrite dans ce chapitre n'est pas un exemple à suivre. Cette méthode a juste pour objectif de fournir rapidement et simplement une structure permettant le déploiement par l'intégration continue des sites et des releases générés.

Le dossier d'installation utilisé pour la rédaction de cet article est : "C:\Program Files\Apache Software Foundation\Apache2.2\".

Créer un dossier "tutoriel" dans le dossier "dossier d'installation d'Apache\htdocs". Puis, créer les dossiers "sites" et "releases" dans ce dossier "tutoriel".

Décommenter les lignes suivantes dans le fichier de configuration "httpd.conf" afin de permettre le chargement des modules de WebDAV (mod_dav, mod_dav_fs et mod_dav_lock).

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_lock_module modules/mod_dav_lock.so

Ajouter les lignes ci-dessous en fin du fichier de configuration "httpd.conf".

DavLockDB /DavLock

<Location /tutoriel/sites>
Order Allow,Deny
Allow from all
Dav On

AuthType Basic
AuthName DAV
AuthUserFile user.passwd

<LimitExcept GET OPTIONS>
Require user sites
</LimitExcept>
</Location>

<Location /tutoriel/releases>
Order Allow,Deny
Allow from all
Dav On

AuthType Basic
AuthName DAV
AuthUserFile user.passwd

<LimitExcept GET OPTIONS>
Require user releases
</LimitExcept>
</Location>

Cette configuration permet de paramétrer deux emplacements accessibles par WebDAV. Pour cela, il faut indiquer que les emplacements fonctionnent avec WebDAV, qu'ils nécessitent une authentification et les comptes utilisateurs pouvant accéder par WebDAV aux emplacements.

Les éléments intéressants dans cette configuration sont :

- la directive "DavLockDB /DavLock" (documentation ici) indique la base des verrous ;

- la directive "Dav On" (documentation ici) active WebDAV pour l'URL du "Location" englobant ;

- les directives "AuthType Basic - AuthName DAV - AuthUserFile user.passwd" (documentation ici, ici et ici) indiquent le procédé d'authentification et le fichier contenant les comptes d'utilisateurs et mots de passe ;

- les directives "<LimitExcept GET OPTIONS> - Require user ****** - >/LimitExcept>" (documentation ici et ici) indiquent l'utilisateur authentifié qui n'est pas limité aux méthodes HTTP passées en paramètres et qui donc peut utiliser les méthodes HTTP pour WebDAV.

Dans le dossier d'Apache, taper les commandes suivantes, afin de créer les utilisateurs "sites" et "releases" dans le fichier "user.passwd" qui ont été définis dans la configuration d'Apache. Le mot de passe saisi est à reporter (comme on le verra un peu plus loin) dans le fichier "settings.xml" de "Maven". Attention : les deux commandes n'ont pas exactement les mêmes paramètres (l'option -c écrase le fichier, voir la documentation de la commande).

C:\Program Files\Apache Software Foundation\Apache2.2>bin\htpasswd -c user.passwd sites
Automatically using MD5 format.
New password: **********
Re-type new password: **********
Adding password for user site

C:\Program Files\Apache Software Foundation\Apache2.2>bin\htpasswd user.passwd releases
Automatically using MD5 format.
New password: **********
Re-type new password: **********
Adding password for user repository

C:\Program Files\Apache Software Foundation\Apache2.2>

Une fois la configuration effectuée, il faut redémarrer Apache pour qu'elle soit prise en compte.

III-E - Maven

Le dossier d'installation utilisé pour la rédaction de cet article est : "C:\Program Files\maven".

Rajouter "C:\Program Files\maven\bin" à la variable d'environnement "PATH".

Vérifier que Maven est bien installé en lançant la commande "mvn -v". On doit obtenir le résultat du type ci-dessous :

C:\>mvn -v
Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
Java version: 1.6.0_20
Java home: C:\Program Files\Java\jdk1.6.0_20\jre
Default locale: fr_FR, platform encoding: Cp1252
OS name: "windows 7" version: "6.1" arch: "x86" Family: "windows"
C:\>

Configurer l'accès au serveur WebDAV pour le déploiement des sites et des releases en ajoutant les lignes suivantes dans la partie "servers" du fichier "C:\Program Files\maven\conf\settings.xml".

settings.xml

<servers>
<server>
<id>sites</id>
<username>sites</username>
<password>mot de passe stocké pour cet utilisateur dans user.passwd pour la conf Apache</password>
</server>
<server>
<id>releases</id>
<username>releases</username>
<password>mot de passe stocké pour cet utilisateur dans user.passwd pour la conf Apache</password>
</server>
</servers>

III-F - Continuum

Copier les librairies "derby-10.1.3.1.jar", "derbytools-10.1.3.1.jar", "mail-1.4.jar" et "activation-1.1.jar" dans "dossier d'installation de Tomcat\lib".

Fixer la variable "appserver.base" avec "dossier d'installation de Tomcat" (ce qui permet d'avoir les logs de Continuum dans "dossier d'installation de Tomcat\logs"), dans la ligne de commande du lancement de Tomcat. Faire un clic droit sur l'icône systray "Monitor Tomcat" et choisir "Configure...", afin d'accéder à son écran de configuration.

Aller dans l'onglet "Java" et ajouter "-Dappserver.base=dossier d'installation de Tomcat" dans "Java Options".

Déployer le war "apache-continuum-1.3.6.war" sous Tomcat. Pour cela, dans le "Gestionnaire d'applications WEB Tomcat", saisir "/continuum" dans "Chemin de context (requis)" et le chemin vers le fichier war dans "WAR or Directory URL". Puis, cliquer sur le bouton "Deployer" juste en dessous.

L'application ne fonctionnera pas immédiatement après le déploiement parce que les ressources qui lui sont nécessaires ne sont pas configurées.

Dans "dossier d'installation de Tomcat\conf\Catalina\localhost\" (créer les dossiers si nécessaire), créer un fichier "continuum.xml". Remplir le fichier avec le contenu ci-dessous.

continuum.xml

<?xml version='1.0' encoding='utf-8'?>
<Context path="/continuum"
docBase="webapps\continuum.war">

<Resource name="jdbc/users"
auth="Container"
type="javax.sql.DataSource"
username="sa"
password=""
driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
url="jdbc:derby:database/users;create=true" />

<Resource name="jdbc/continuum"
auth="Container"
type="javax.sql.DataSource"
username="sa"
password=""
driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
url="jdbc:derby:database/continuum;create=true" />

<Resource name="mail/Session"
auth="Container"
type="javax.mail.Session"
mail.smtp.host="smtp acceptant les connexions sans identifications (FAI par exemple)"/>

</Context>

Il est possible de préciser un serveur SMTP nécessitant une authentification, mais les éléments d'authentification sont à saisir directement dans le fichier "applicationContext.xml" de l'application continuum.

Redémarrer le serveur Tomcat.

Maintenant, l'application Continuum doit être démarrée. Elle est accessible à l'adresse : http://localhost:8080/continuum.

III-G - Subversion

Le dossier d'installation utilisé pour la rédaction de cet article est : "C:\Program Files\Subversion\".

Créer un dossier qui servira de repository svn (ex : "c:\svn_repos").

Créer le repository en exécutant sous la console la commande : "svnadmin create c:\svn_repos".

Dans le fichier "svnserve.conf" du dossier "C:\svn_repos\conf", décommenter (en enlevant le # de début) les lignes "anon-access = read", "auth-access = write" et "password-db = passwd" (ici les lignes 12, 13, et 20).

svnserve.conf

1. ### This file controls the configuration of the svnserve daemon, if you

2. ### use it to allow access to this repository.  (If you only allow

3. ### access through http: and/or file: URLs, then this file is

4. ### irrelevant.)

6. ### Visit http://subversion.tigris.org/ for more information.

8. [general]

9. ### These options control access to the repository for unauthenticated

10. ### and authenticated users.  Valid values are "write", "read",

11. ### and "none".  The sample settings below are the defaults.

12. anon-access = read

13. auth-access = write

14. ### The password-db option controls the location of the password

15. ### database file.  Unless you specify a path starting with a /,

16. ### the file's location is relative to the directory containing

17. ### this configuration file.

18. ### If SASL is enabled (see below), this file will NOT be used.

19. ### Uncomment the line below to use the default password file.

20. password-db = passwd

21. ### The authz-db option controls the location of the authorization

22. ### rules for path-based access control.  Unless you specify a path

23. ### starting with a /, the file's location is relative to the the

24. ### directory containing this file.  If you don't specify an

25. ### authz-db, no path-based access control is done.

26. ### Uncomment the line below to use the default authorization file.

27. # authz-db = authz

28. ### This option specifies the authentication realm of the repository.

29. ### If two repositories have the same authentication realm, they should

30. ### have the same password database, and vice versa.  The default realm

31. ### is repository's uuid.

32. # realm = My First Repository

34. [sasl]

35. ### This option specifies whether you want to use the Cyrus SASL

36. ### library for authentication. Default is false.

37. ### This section will be ignored if svnserve is not built with Cyrus

38. ### SASL support; to check, run 'svnserve --version' and look for a line

39. ### reading 'Cyrus SASL authentication is available.'

40. # use-sasl = true

41. ### These options specify the desired strength of the security layer

42. ### that you want SASL to provide. 0 means no encryption, 1 means

43. ### integrity-checking only, values larger than 1 are correlated

44. ### to the effective key length for encryption (e.g. 128 means 128-bit

45. ### encryption). The values below are the defaults.

46. # min-encryption = 0

47. # max-encryption = 256

Dans le fichier "passwd" du dossier "C:\svn_repos\conf", ajouter une ligne en fin de fichier du type nomUtilisateur = motDePasse (dans l'exemple nomUtilisateur vaut "tutoContinuum" et motDePasse vaut "developpez").

passwd

### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret
tutorielContinuum = developpez

Démarrer le serveur en exécutant sous la console la commande : "svnserve --daemon --root c:\svn_repos".

Il est possible de démarrer le serveur sous forme de service : Partie "Paramétrer le serveur comme service" de Installation de Subversion sur Windows par Eric Reboisson.

III-H - Subversive

Dans Eclipse, sélectionner "Help"/"Install New Software...".

Saisir les sites "http://community.polarion.com/projects/subversive/download/eclipse/2.0/galileo-site/" (Subversive SVN Connectors) et "http://download.eclipse.org/releases/galileo" (Galileo) en cliquant sur "Add..." et en validant sur "OK".

Cocher "Subversive SVN Team Provider", "Subversive SVN Connectors" et "SVNKit 1.3.0 Implementation". Puis, cliquer sur "Next >"

Cliquer sur "Next >" :

Sélectionner "I accept the terms of the license agreement". Puis, cliquer sur "Finish".

L'installation se déroule.

Lorsque ce message apparaît, cliquer sur "OK".

Cliquer sur "Yes" pour relancer Eclipse.

IV - CREATION DE PROJETS D'EXEMPLE SOUS ECLIPSE

IV-A - Différents projets d'exemple

Pour les besoins de cet article, il est nécessaire de créer des projets d'exemple correspondants aux cas qui peuvent se présenter lors de l'intégration continue.

- NeCompilePas : projet qui ne compile pas.

- SansTests : projet qui compile et qui n'a pas de tests.

- TestsCompileKO : projet qui compile et qui a des tests qui ne compilent pas.

- TestsKO : projet qui compile et qui a des tests qui compilent, mais ne passent pas.

- TestsOK : projet qui compile et qui a des tests qui compilent et passent.

IV-A-1 - Structure des projets d'exemple

Les différents projets d'exemple ont une structure similaire :

Conformément à l'arborescence projet préconisée par Maven, les sources du projet sont dans "src/main/java". Les sources des tests du projet sont dans "src/test/java" et le pom.xml est à la racine du projet.

Chaque projet ne contiendra qu'une seule classe "ClasseDuProjet" dans le package "com.developpez.rpouiller.continuum" et si le projet comporte des tests, ceux-ci seront dans la classe "CasDeTestDuProjet" du même package.

IV-A-2 - Contenu du fichier Maven pom.xml

Le fichier Maven "pom.xml" de chaque projet comporte un contenu comme ci-dessous. Les valeurs "[groupe]", "[projet]", "[Projet]" et "[projetSurSVN]" sont à remplacer par le groupe auquel appartient le projet, l'identifiant du projet, le nom du projet et le nom du projet sur Subversion.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>[groupe]</groupId>
<artifactId>[projet]</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>[Projet]</name>

<scm>
<connection>scm:svn:svn://localhost/[projetSurSVN]/trunk</connection>
</scm>

<ciManagement>
<system>continuum</system>
<url>http://localhost:8080/continuum</url>
<notifiers>
<notifier>
<type>mail</type>
<sendOnError>true</sendOnError>
<sendOnFailure>true</sendOnFailure>
<sendOnSuccess>true</sendOnSuccess>
<sendOnWarning>true</sendOnWarning>
<configuration>
<address>tutoriel.continuum@gmail.com</address>
</configuration>
</notifier>
</notifiers>
</ciManagement>

<developers>
<developer>
<id>regis.pouiller</id>
<name>Régis POUILLER</name>
<url>http://rpouiller.developpez.com</url>
<roles>
<role>Rédacteur du tutoriel</role>
</roles>
<timezone>1</timezone>
</developer>
</developers>

<contributors>
<contributor>
<name>Continuum</name>
<url>http://continuum.apache.org/</url>
<roles>
<role>Sujet de l'article</role>
</roles>
<timezone>0</timezone>
</contributor>
</contributors>

<build>
<plugins>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<locales>fr</locales>
</configuration>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>site</goal>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>

<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>

<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
</plugin>
</plugins>
</reporting>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>

<distributionManagement>
<site>
<id>sites</id>
<name>Site du projet</name>
<url>dav://localhost/tutoriel/sites/${project.name}-${project.version}</url>
</site>
<repository>
<id>releases</id>
<name>Repository du projet</name>
<url>dav://localhost/tutoriel/releases/</url>
</repository>
</distributionManagement>
</project>

La partie "scm" indique la connexion à Subversion. La documentation sur cette balise est disponible ici.

La partie "ciManagement" indique les notifications à envoyer selon les cas rencontrés lors de l'intégration continue. La documentation sur cette balise est disponible ici.

La partie "developers" contient la liste des personnes du projet, leurs rôles et leur adresse mail. La documentation sur cette balise est disponible ici.

La partie "contributors" contient la liste contributeurs au projet. La documentation sur cette balise est disponible ici.

La partie "build/plugins" contient le plugin "site" (documentation du plugin ici) qui est paramétré pour générer et déployer le site en français lorsque la phase "deploy" est déclenchée, le plugin "compiler" (documentation du plugin ici) qui est paramétré pour compiler en Java5 et le plugin "surefire" (documentation du plugin ici) qui est paramétré pour lancer toutes les classes de tests qu'il trouve (par défaut il s'agit des classes commençant par "Test" ou finissant par "Test" ou "TestCase", la documentation est disponible ici). La documentation sur cette balise est disponible ici.

La partie "reporting/plugins" contient le plugin "surefire-report" (documentation du plugin ici) qui crée, lors de la génération du site, le rapport lié aux tests par SureFire. La documentation sur cette balise est disponible ici.

La partie "dependencies" contient la liste des dépendances du projet (ici c'est juste la version 4.5 de JUnit). La documentation sur cette balise est disponible ici.

La partie "distributionManagement" indique où les sites et les releases sont déposés. La documentation sur cette balise est disponible ici.

IV-A-3 - Génération des fichiers d'Eclipse (.classpath et .project) grâce au fichier Maven pom.xml

La commande "mvn eclipse:eclipse" exécutée dans le dossier d'un projet permet de mettre à jour le classpath du projet (elle génère des fichiers .project et .classpath) après téléchargement des dépendances si besoin. Il faut rafraîchir le projet dans la vue Eclipse pour recharger le classpath généré. Le classpath généré utilise la variable "M2_REPO" (voir les "Referenced Libraries" dans la structure des projets). Cette variable est à configurer dans les préférences d'Eclipse "Java/Build Path/Classpath Variables" avec le chemin du repository Maven ("dossierUtilisateur\.m2\repository").

IV-A-4 - Classe du projet

Chaque projet d'exemple comporte une seule classe (dans ce cas, une classe sans erreur de compilation), qui correspond au code ci-dessous (avec les différences nécessaires à l'exemple).

ClasseDuProjet.java

package com.developpez.rpouiller.continuum;

public class ClasseDuProjet {

public int methode() {
return 0;
}
}

IV-A-5 - Cas de tests du projet

Chaque projet d'exemple avec tests comporte une seule classe de tests (dans ce cas des tests qui compilent et qui passent), qui correspond au code ci-dessous (avec les différences nécessaires à l'exemple).

CasDeTestsDuProjet.java

package com.developpez.rpouiller.continuum;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class CasDeTestsDuProjet {

@Test
public void controleMethode() {
assertEquals(0, new ClasseDuProjet().methode());
}
}

IV-A-6 - Implémentation des projets

IV-A-6-a - Implémentation du projet "NeCompilePas"

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>sanstests</groupId>
<artifactId>necompilepas</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>NeCompilePas</name>

<scm>
<connection>scm:svn:svn://localhost/NeCompilePas/trunk</connection>
</scm>

.........

</project>

ClasseDuProjet.java

package com.developpez.rpouiller.continuum;

public class ClasseDuProjet {

public int methode() {
// Erreur de compilation.
// return 0;
}
}

IV-A-6-b - Implémentation du projet "SansTests"

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>sanstests</groupId>
<artifactId>sanstests</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SansTests</name>

<scm>
<connection>scm:svn:svn://localhost/SansTests/trunk</connection>
</scm>

.........

</project>

Ce projet et les suivants comportent une "ClasseDuProjet" identique à celle présentée dans le IV-A-4. Classe du projet.

IV-A-6-c - Implémentation du projet "TestsCompileKO"

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>avectests</groupId>
<artifactId>testscompileko</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>TestsCompileKO</name>

<scm>
<connection>scm:svn:svn://localhost/TestsCompileKO/trunk</connection>
</scm>

.........

</project>

CasDeTestsDuProjet.java

package com.developpez.rpouiller.continuum;

import org.junit.Test;

public class CasDeTestsDuProjet {

@Test
public void controleMethode() {
// Erreur de compilation (pas d'import de "assertEquals")
assertEquals(0, new ClasseDuProjet().methode());
}
}

IV-A-6-d - Implémentation du projet "TestsKO"

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>avectests</groupId>
<artifactId>testsko</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>TestsKO</name>

<scm>
<connection>scm:svn:svn://localhost/TestsKO/trunk</connection>
</scm>

.........

</project>

CasDeTestsDuProjet.java

package com.developpez.rpouiller.continuum;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class CasDeTestsDuProjet {

@Test
public void controleMethode() {
// Erreur dans les tests : la méthode retourne 0
assertEquals(1, new ClasseDuProjet().methode());
}
}

IV-A-6-e - Implémentation du projet "TestsOK"

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>avectests</groupId>
<artifactId>testsok</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>TestsOK</name>

<scm>
<connection>scm:svn:svn://localhost/TestsOK/trunk</connection>
</scm>

.........

</project>

Ce projet comporte un "CasDeTestsDuProjet" identique à celui présenté dans le IV-A-5. Cas de tests du projet.

IV-A-6-f - Téléchargement des projets

Les fichiers zip téléchargeables ici contiennent uniquement les sources et le pom.xml de chaque projet. Ce sont les seuls éléments qui doivent être commités(1) sous SVN pour l'intégration continue.

Les fichiers ".project" et ".classpath" nécessaires à Eclipse peuvent être générés grâce à la commande "mvn eclipse:eclipse", comme indiqué en info dans le IV-A-3. Génération des fichiers d'Eclipse (.classpath et .project) grâce au pom.xml.

Projet

Téléchargement

NeCompilePas

ici (Miroir)

SansTests

ici (Miroir)

TestsCompileKO

ici (Miroir)

TestsKO

ici (Miroir)

TestsOK

ici (Miroir)

IV-B - Partage du projet sur Subversion

IV-B-1 - Choix de l'emplacement du référentiel Subversion

Effectuer un clic droit sur le projet, puis choisir "Team"/"Share Project...".

Choisir "SVN", puis cliquer sur "Next >".

Saisir "svn://localhost/" dans "URL". Saisir le compte utilisateur SVN et le mot de passe qui ont été entrés dans le fichier "passwd" du dossier "C:\svn_repos\conf" dans "User" et "Password", puis cliquer sur "Next".

Sélectionner "Advanced Mode" et "Use single project layout", puis cliquer sur "Finish".

Cliquer sur "Cancel".

IV-B-2 - Commit du projet sur Subversion

Pour commiter des ressources sur Subversion, il faut les sélectionner (ici le dossier "src" et le fichier "pom.xml", juste après le partage) puis effectuer un clic droit et choisir "Team"/"Commit...".

Saisir un commentaire, puis valider le commit en cliquant sur "OK".

V - UTILISATION DE CONTINUUM (Connexion et paramétrage)

V-A - Connexion à Continuum

V-A-1 - Première connexion à Continuum

Lors de la première connexion à Continuum (http://localhost:8080/continuum), il est nécessaire de donner les informations du compte administrateur. Attention : le mot de passe doit contenir au moins un nombre. Puis cliquer sur "Créer l'administrateur".

Laisser les valeurs par défaut et cliquer sur "Sauvegarder".

V-A-2 - Connexions suivantes à Continuum

Lors des connexions suivantes, il sera nécessaire de s'identifier grâce aux informations préalablement saisies.

V-B - Paramétrage

V-B-1 - Paramétrage des files d'attente

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/administrator_guides/buildQueue.html

Cliquer sur "Administration"/"Configuration" dans le menu vertical.

Changer la valeur dans le champ "Nombre de constructions en parallèle autorisé", puis cliquer sur "Sauvegarder".

Cliquer sur "Constructions parallèles "/"File d'attente des constructions parallèles " dans le menu vertical.

Pour créer une nouvelle file d'attente, il faut cliquer sur le bouton "Ajouter".

Saisir le nom, puis cliquer sur "Sauvegarder".

La nouvelle file d'attente apparaît en bas de tableau.

Il est également possible de supprimer les files d'attente, grâce à l'icône en bout de lignes de tableau.

V-B-2 - Paramétrage des planifications

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/administrator_guides/schedules.html.

Cliquer sur "Administration"/"Planifications" dans le menu vertical.

Pour créer une nouvelle planification, il faut cliquer sur le bouton "Ajouter".

Saisir les informations des différents champs, puis cliquer sur "Sauvegarder".

La nouvelle planification apparaît en bas de tableau.

Il est également possible de modifier ou de supprimer les planifications, grâce aux icônes en bout de lignes de tableau. La modification conduit au même écran que la création.

V-B-3 - Paramétrage des installations (outils/variables de construction)

La documentation sur cette fonctionnalité est disponible en ligne aux adresses http://continuum.apache.org/docs/1.3.6/administrator_guides/jdk.html pour un JDK, et http://continuum.apache.org/docs/1.3.6/administrator_guides/builder.html pour un outil de construction.

Par défaut, pour réaliser les constructions, Continuum utilise les outils qu'il trouve par les variables d'environnement (JAVA_HOME, M2_HOME...). Pour utiliser un outil différent, il faut le déclarer dans le paramétrage des outils et variables d'environnement.

Cliquer sur "Administration"/"Installations" dans le menu vertical.

Pour déclarer un nouvel élément de construction, il faut cliquer sur le bouton "Ajouter".

Choisir "Outil" dans "Type de l'installation", puis cliquer sur "Ajouter".

Choisir le type "JDK". Entrer les informations de nom et de chemin, puis cliquer sur "Sauvegarder".

Le nouvel élément de construction apparaît dans le tableau.

Il est également possible de modifier ou de supprimer des éléments de construction, grâce aux icônes en bout de lignes de tableau. La modification conduit au même écran que la création.

V-B-4 - Paramétrage des environnements de construction

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/administrator_guides/buildEnvironment.html.

Cliquer sur "Administration"/"Environnements de construction" dans le menu vertical.

Pour déclarer un nouvel environnement de construction, il faut cliquer sur le bouton "Ajouter".

Saisir le nom de l'environnement, puis cliquer sur "Sauvegarder".

Choisir l'outil de construction "JDK 1.4" dans la liste déroulante, puis cliquer sur "Ajouter".

L'outil de construction apparaît dans la liste des outils/variables de construction. Il est possible de le supprimer grâce à l'icône croix en bout de ligne. Pour retourner à la liste des environnements de construction, cliquer sur "Administration"/"Environnement de Build" dans le menu vertical.

Le nouvel environnement de construction apparaît dans le tableau.

Il est également possible de modifier ou de supprimer des environnements de construction, grâce aux icônes en bout de lignes de tableau. La modification conduit au même écran que la création.

V-B-5 - Paramétrage des modèles de construction

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/user_guides/managing_builddef/builddefGroup.html et à l'adresse http://continuum.apache.org/docs/1.3.6/administrator_guides/builddefTemplate.html.

Cliquer sur "Administration"/"Modèle de déf. des" dans le menu vertical.

Le tableau du haut contient des modèles de construction. Celui du bas contient des définitions de construction. Un modèle de construction consiste en n définitions de construction. Une définition de construction indique le paramétrage d'une construction.

Pour déclarer une nouvelle définition de construction, cliquer sur le bouton "Ajouter" du bas (voir encadré rouge).

Saisir les différentes informations dont la planification préalablement créée, puis cliquer sur "Sauvegarder".

La nouvelle définition de construction apparaît dans le tableau.

Il est également possible de modifier ou de supprimer des définitions de construction, grâce aux icônes en bout de lignes de tableau (les définitions de base ne sont pas supprimables). La modification conduit au même écran que la création.

Pour déclarer un nouveau modèle de construction, cliquer sur le bouton "Ajouter" du haut (voir encadré rouge).

Saisir un nom pour le nouveau modèle. Choisir les différentes définitions de construction constituant le modèle, en les ajoutant grâce à la flèche ("->"), puis cliquer sur "Sauvegarder".

Le nouveau modèle de construction apparaît dans le tableau.

Il est également possible de modifier ou de supprimer des modèles de construction, grâce aux icônes en bout de lignes de tableau (les modèles de base ne sont pas supprimables). La modification conduit au même écran que la création.

VI - UTILISATION DE CONTINUUM (Continuum en mode classique)

VI-A - Création/suppression de groupes de projets

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/administrator_guides/projectgroup.html.

Pour accéder à la liste des groupes de projets, cliquer sur "Continuum"/"Groupes de projets" dans le menu vertical.

Pour créer un nouveau groupe de projets, cliquer sur le bouton "Ajouter un groupe de projets".

Saisir les différentes informations du groupe de projets, puis cliquer sur "Sauvegarder".

Le nouveau groupe de projets apparaît dans la liste des groupes de projets.

Il est possible de supprimer des groupes de projets, grâce aux icônes de suppression sur chaque ligne du tableau. Remarque : la suppression d'un groupe de projets entrainera la suppression des projets le constituant.

VI-B - Ajout/suppression de projets

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/user_guides/managing_project/addProject.html et à l'adresse http://continuum.apache.org/docs/1.3.6/user_guides/managing_project/removeProject.html.

VI-B-1 - Ajout depuis la fonctionnalité générale

Cliquer sur "Ajouter un projet"/"Projet Maven 2.0.X" dans le menu vertical.

Il est possible de préciser une adresse avec éventuellement le compte et le mot de passe permettant d'accéder au fichier pom.xml du projet. Ou il est possible de charger le fichier pom.xml du projet depuis un emplacement disque. Il est possible de préciser le groupe de projets du projet ou de laisser celui défini dans le fichier pom.xml. Il est également possible de préciser le modèle de construction du projet. Cette dernière information peut être modifiée par la suite.

Le projet apparaît dans la liste des projets de son groupe de projets.

VI-B-2 - Ajout depuis un groupe de projets

Cliquer sur "Continuum"/"Groupes de projets" dans le menu vertical. Puis, cliquer sur un groupe de projets (SansTests dans l'exemple).

Pour ajouter un projet à ce groupe de projets, cliquer sur le bouton "Ajouter" après avoir sélectionné "Add M2 Project".

L'écran correspond à celui du "Ajout depuis la fonctionnalité générale" mis à part que le groupe de projets est non modifiable.

Le projet apparaît dans la liste des projets de son groupe de projets.

Il est possible de supprimer un projet d'un groupe de projets, grâce à l'icône croix rouge en bout de ligne.

VI-C - Construire un projet

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/user_guides/building_project/index.html.

Cliquer sur "Continuum"/"Groupes de projets" dans le menu vertical. Puis, cliquer sur un groupe de projets (SansTests dans l'exemple).

Pour lancer la construction, cliquer sur l'icône "Construire maintenant" de la ligne du projet ou cocher le projet et cliquer sur le bouton "Construire projet(s)".

La ligne de projet indique que le projet est en construction.

Le résultat de la construction est maintenant visible. L'icône de résultat et le chiffre dans la colonne "construire" sont des liens vers le détail de la construction.

Cette page indique les détails de la construction.

VI-D - Construire tous les projets d'un groupe de projets

Pour lancer la construction de tous les projets d'un groupe de projets, il y deux possibilités : cliquer sur l'icône "Construire maintenant"/"Construire tous les projets" de la ligne du groupe de projets dans la liste des groupes de projets (voir encadré rouge) ou cliquer sur le bouton "Construire tous les projets" dans l'écran du groupe de projets.

Tous les projets du groupe de projets sont construits. Ici, une construction en échec (erreur de compilation) pour le premier projet et une deuxième construction réussie pour le second projet.

Cliquer sur le lien dans la colonne "Nom de projet" permet d'aboutir aux détails du projet.

Cliquer sur l'onglet "Constructions" permet d'aboutir à la liste des constructions du projet avec les résultats associés.

VI-E - Releaser un projet

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/user_guides/release/index.html.

Pour releaser un projet, cliquer sur l'icône de release sur la ligne du projet.

Sélectionner l'option "Préparer le projet pour la "release"". Puis, cliquer sur "Submit".

Saisir les renseignements : les paramètres du SCM (dont Compte et mot de passe), la version de la release, la version du projet après release..., puis cliquer sur "Submit".

Une fois toutes les étapes de la préparation pour la release passées avec succès, cliquer sur "Terminé".

Sélectionner l'option "Effectuer la "release" du projet", puis cliquer sur "Submit".

Saisir les arguments Maven, puis cliquer sur "Submit".

Une fois toutes les étapes de la release passées avec succès, cliquer sur "Terminé".

La release est désormais disponible à l'adresse http://localhost/tutoriel/releases/avectests/testsok/1.0/.

Le fichier "pom.xml" permet que le site soit également déployé pendant le déploiement de la release. Le site est disponible à l'adresse http://localhost/tutoriel/sites/TestsOK-1.0/.

VI-F - Modifier les définitions de construction d'un projet

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/user_guides/managing_project/editProject.html.

Cliquer sur le projet (TestsKO dans l'exemple) dans la liste des projets du groupe de projets.

Cliquer sur le bouton "Ajouter" de la liste des définitions de construction.

Saisir les informations de la définition de construction, puis cliquer sur le bouton "Sauvegarder".

La nouvelle définition apparaît dans la liste.

VI-G - Modifier les définitions de construction d'un groupe de projets

Dans l'écran du groupe de projets (sanstests dans l'exemple), cliquer sur l'onglet "Définitions des constructions".

Cliquer sur le bouton "Ajouter" de la liste des définitions de construction.

Saisir les informations de la définition de construction, puis cliquer sur le bouton "Sauvegarder".

La nouvelle définition apparaît dans la liste.

VI-H - Ajout de notifications à un projet

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/user_guides/notification/index.html.

Cliquer sur le projet (TestsOK dans l'exemple) dans la liste des projets du groupe de projets.

Cliquer sur le bouton "Ajouter" de la liste des notifications (cette liste de départ est issue de la section "ciManagement" du fichier pom.xml du projet).

Choisir le type de notification, puis cliquer sur "Soumettre".

S'il s'agit d'une notification par mail, saisir l'adresse mail de destination de la notification. Cliquer sur les évènements déclenchant la notification (succès, échec, erreur et avertissement), puis cliquer sur "Sauvegarder".

La nouvelle notification apparaît dans la liste des notifications pour le projet.

VI-I - Ajout de notifications à un groupe de projets

Dans l'écran du groupe de projet (avectests dans l'exemple), cliquer sur l'onglet "Alertes".

Cliquer sur le bouton "Ajouter" de la liste des notifications du groupe de projets

Choisir le type de notification, puis cliquer sur "Soumettre".

Saisir les informations et cliquer sur le bouton "Sauvegarder".

La nouvelle notification apparaît dans la liste des notifications pour le groupe de projets.

VII - UTILISATION DE CONTINUUM (Continuum en mode distribué)

VII-A - Intérêt de la construction en mode distribué

Une évolution importante de Continuum dans les versions 1.3.x est la possibilité de réaliser des constructions en mode distribué grâce à des agents de constructions (qui réalisent les contructions sur d'autres machines que celle hébergeant Continuum).

La construction distribuée présente plusieurs intérêts :

- permettre un gain de temps de construction en répartissant la charge de différents éléments d'un ensemble ;

- réaliser la construction d'un même élément dans des environnements différents.

VII-B - Fonctionnement en mode distribué

La documentation sur le fonctionnement est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/administrator_guides/distributed-builds.html.

Le fonctionnement en mode distribuée comporte quelques différences par rapport au fonctionnement en mode classique.

Les planifications ne sont plus liées à une file d'attente.

Un environnement de construction est lié à des groupes d'agents de construction.

Un groupe d'agents de construction comportent plusieurs agents de construction.

Un agent de construction comporte une URL permettant d'avoir une communication en XML-RPC avec l'agent sur la machine distante.

Plusieurs agents de construction peuvent être déployés sur le réseau. L'instance de Continuum effectue une communication XML-RPC bidirectionnelle avec les différents agents.

VII-C - Installation d'un agent de construction

La documentation sur l'installation d'un agent de construction est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/installation/build-agent.html.

Les agents de construction est disponible en version "standalone" et en version application Web. L'article présente la version "standalone".

Déployer le fichier zip (voir les versions des logiciels) contenant l'agent de construction.

Définir une variable d'environnement "CONTINUUM_BUILDAGENT_HOME" avec le dossier d'installation de l'agent de construction.

Éventuellement, modifier le fichier "continuum-buildagent.xml" contenu dans le sous-dossier "conf" du dossier d'installation.

Sous Windows, l'agent se lance avec la commande "continuum-buildagent.bat console".

VII-D - Paramétrage dans continuum

VII-D-1 - Activation des constructions distribuées

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/administrator_guides/configuration.html.

Cliquer sur "Administration"/"Configuration" dans le menu vertical.

Cocher "Activer les constructions distribuées", puis cliquer sur "Sauvegarder".

Dans le menu vertical, la partie "Constructions parallèles" est remplacée par la partie "Constructions distribuées".

VII-D-2 - Paramétrage d'un agent de construction

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/administrator_guides/build-agents.html.

Cliquer sur "Constructions distribuées"/"Agents de construction" dans le menu vertical.

Cliquer sur le premier bouton "Ajouter".

Pour un agent en version standalone, son URL est de la forme http://adresseMachine:port/continuum-buildagent/xmlrpc.

Pour un agent en version application Web, son URL est de la forme http://adresseMachine:portServeurApplication/contexteApplicationWeb/xmlrpc.

Saisir l'"URL de l'agent de construction" (par défaut le port est 8181). Cocher la case "Activé", puis cliquer sur le bouton "Sauvegarder".

Le nouvel agent de construction apparaît dans le tableau.

Il est également possible de modifier ou de supprimer des agents de construction, grâce aux icônes en bout de lignes de tableau. La modification conduit au même écran que la création.

VII-D-3 - Paramétrage d'un groupe d'agents de construction

La documentation sur cette fonctionnalité est disponible en ligne à l'adresse http://continuum.apache.org/docs/1.3.6/administrator_guides/build-agent-groups.html.

Cliquer sur "Constructions distribuées"/"Agents de construction" dans le menu vertical.

Cliquer sur le deuxième bouton "Ajouter".

Saisir le "nom". Ajouter les agents de constructions, puis cliquer sur le bouton "Sauvegarder".

Le nouveau groupe d'agents de construction apparaît dans le tableau.

Il est également possible de modifier ou de supprimer des groupes d'agents de construction, grâce aux icônes en bout de lignes de tableau. La modification conduit au même écran que la création.

VII-D-4 - Paramétrage d'un groupe d'agents de construction dans un environnement de construction et une définition de construction

Cliquer sur "Administration"/"Environnements de construction" dans le menu vertical.

Pour déclarer un nouvel environnement de construction, il faut cliquer sur le bouton "Ajouter".

Saisir le nom de l'environnement, puis cliquer sur "Sauvegarder".

Choisir le "groupe d'agents de construction", puis cliquer sur "Sauvegarder".

Le nouvel environnement de construction apparaît dans le tableau.

Cliquer sur "Administration"/"Modèle de déf. des" dans le menu vertical.

Cliquer sur le deuxième bouton "Ajouter" (voir encadré rouge).

Saisir les informations. Choisir l'environnement de construction avec l'agent de construction, puis cliquer sur le bouton "Sauvegarder".

La nouvelle définition de construction apparaît dans le tableau.

Cliquer sur le premier bouton "Ajouter" (voir encadré rouge).

Saisir le nom. Ajouter les définitions de construction. Cliquer sur le bouton "Sauvegarder".

Le nouveau modèle de construction apparaît dans le tableau.

VII-D-5 - Ajout et construction d'un projet avec un agent de construction

Cliquer sur "Ajouter un projet"/"Projet Maven 2.0.X" dans le menu vertical.

Saisir les informations. Choisir le modèle de construction avec l'agent de construction. Cliquer sur le bouton "Ajouter".

Le projet est ajouté dans la liste des projets de son groupe. Cliquer sur l'icône de construction.

La construction a été réalisée par l'agent de construction.

VIII - REMERCIEMENTS

Je remercie sincèrement par ordre plus ou moins chronologique :

- www.developpez.com me permettant de publier cet article.

- Nono40 pour ses outils.

- Baptiste Wicht pour ses conseils et ses encouragements.

- evenisse pour sa relecture technique et sa disponibilité.

- koala01 pour sa relecture orthographique.

- jacques_jean pour ses relectures orthographiques (première version et mise à jour).

- Wachter pour sa relecture orthographique.

- Ricky81 pour la relecture technique de la mise à jour.

(1) commit : soumission au gestionnaire de versions (SVN)