jeudi 8 janvier 2009

Mise en oeuvre de Ivy2 dans Hudson

Cette semaine a été livré le plugin Hudson pour le gestionnaire de dépendances Ivy 2.
L’objectif est de pouvoir déduire dans Hudson l’ordre d’exécution des jobs Hudson (1 job Hudson correspond à 1 projet Ivy) à partir des informations des dépendances fournies par Ivy.
Cette technique permet de renfoncer les bonnes pratiques qui consistent à avoir une chaîne d’intégration indépendante du scheduler (ici Hudson). Ainsi aucune configuration supplémentaire redondante n'est nécessaire.

Voici un exemple de mise en oeuvre.

Soient deux jobs Hudson nommée “job1” et “job2”

La première étape consiste à spécifier une configuration Ivy au niveau de Hudson



Configuration du premier projet
Spécifier une configuration de ivy (vous pouvez laisser celle par défaut si vous avez que 1 seul type de configuration)




Voici le contenu du fichier ivy-job1.xml:
<ivy-module version="1.0">
<info organisation="com.zenika.examples" module="job1"/>
</ivy-module>

Configuration du second projet



Voici le contenu du fichier ivy-job2.xml
<ivy-module version="1.0">
<info organisation="com.zenika.examples" module="job2"/>
<dependencies>
<dependency name="job1" rev="latest.integration" />
</dependencies>
</ivy-module>

Lancer au moins un build et le résultat upstream/downstream est le suivant

Le premier projet (job1) est une dépendance du second job (job2).
L’exécution du second job (job 2) est déclenchée après l’exécution du premier job ( job1).


2 commentaires:

eric.lemerdy a dit…

Si j'ai bien compris, on exprime maintenant dans le formalise Ivy2 des dépendances inter-jobs que l'on spécifiait jusqu'à présent classiquement via l'interface Hudson (par la notion de projets en amont/aval). C'est juste un changement de formalisme.

Ne pourrais-t-on pas imaginer un plug-in Hudson qui déduit les dépendances inter-job à partir des fichiers Ivy2 des projets buildés dans lesquels sont décris les dépendances inter-projets ?

Gregory Boissinot's Blog a dit…

Merci Eric de ta remarque. Suite à celle-ci, j’ai modifié légèrement mon introduction. Le plugin Ivy de Hudson n’est pas juste un changement de formalisme pour exprimer les dépendances des jobs Hudson ; mais permet de déduire l’ordre de dépendances des jobs Hudson à partir des informations inter-projet fournient par le gestionnaire de dépendances Ivy.

Prenons l'exemple d'un projet mutli-modules composés de deux modules «dependency» et «dependee».

Soit le fichier de configuration ivy.xml du module «dependee»:
<ivy-module version="1.0">
 <info organisation=" com.example " module="dependee"/>
</ivy-module>

Soit le fichier de configuration ivy.xml du module «depender»:

<ivy-module version="1.0">
<info organisation="com.example " module="depender"/>
<dependencies>
<dependency name="dependee" rev="latest.integration" />
</dependencies>
</ivy-module>

Le plugin Ivy de Hudson te permet de deduire les dependences de compilation entre un job « dependee » correspondant au module Ivy «dependee» et un job Hudson «depender» correspondant au module Ivy «depender».

Dans notre cas ici, le job «dependee» sera en amont (upstream) du job Hudson «depender».
Le job Hudson «depender» sera en aval (downstream) du job Hudson «dependee».