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 :
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 :
Autres serveurs d'intégration continue :
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".
<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.
<?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).
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository. (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)
### Visit http://subversion.tigris.org/ for more information.
[general]
### These options control access to the repository for unauthenticated
### and authenticated users. Valid values are "write", "read",
### and "none". The sample settings below are the defaults.
anon-access = read
auth-access = write
### The password-db option controls the location of the password
### database file. Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control. Unless you specify a path
### starting with a /, the file's location is relative to the the
### directory containing this file. If you don't specify an
### authz-db, no path-based access control is done.
### Uncomment the line below to use the default authorization file.
# authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa. The default realm
### is repository's uuid.
# realm = My First Repository
[sasl]
### This option specifies whether you want to use the Cyrus SASL
### library for authentication. Default is false.
### This section will be ignored if svnserve is not built with Cyrus
### SASL support; to check, run 'svnserve --version' and look for a line
### reading 'Cyrus SASL authentication is available.'
# use-sasl = true
### These options specify the desired strength of the security layer
### that you want SASL to provide. 0 means no encryption, 1 means
### integrity-checking only, values larger than 1 are correlated
### to the effective key length for encryption (e.g. 128 means 128-bit
### encryption). The values below are the defaults.
# min-encryption = 0
# 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").
### 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.