Intégration continue avec Continuum

de projets Maven 2
Continuum


précédentsommairesuivant

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

I-D. Autres ressources sur developpez.com

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

Image non disponible

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).

 
CacherSélectionnez
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".

 
CacherSélectionnez
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).

 
CacherSélectionnez
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 :

 
CacherSélectionnez
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
CacherSélectionnez
  <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.

Image non disponible

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

Image non disponible

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.

Image non disponible

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.

Image non disponible

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
CacherSélectionnez
<?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.

Image non disponible

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

Image non disponible

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
CacherSélectionnez
1.
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").

passwd
CacherSélectionnez
### 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...".

Image non disponible

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".

Image non disponible
Image non disponible

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

Image non disponible

Cliquer sur "Next >" :

Image non disponible

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

Image non disponible

L'installation se déroule.

Image non disponible

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

Image non disponible

Cliquer sur "Yes" pour relancer Eclipse.

Image non disponible

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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. Droits de diffusion permanents accordés à Developpez LLC.