Tutoriel pour l'intégration d'Eclipse Mylyn avec Redmine et Jenkins

Image non disponible

Présentation du plugin Eclipse d'assistance aux développeurs Mylyn.

Une discussion a été ouverte pour les commentaires sur la publication de cet article : [10 commentaires Donner une note à l'article (5)]

Article lu   fois.

L'auteur

HomeViadeoLinkedIn

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. INTRODUCTION

Mylyn est un plugin d'Eclipse. Il s'agit d'un gestionnaire de tâches. Il permet de visualiser des tâches depuis un dépôt de tâches (Bugzilla, Mantis, Jira, Redmine, etc.) et les résultats de construction depuis un serveur d'intégration continue (Hudson, Jenkins).

L'objectif de Mylyn est de permettre au développeur de se concentrer sur la réalisation et de perdre moins de temps avec les tâches liées (recherche de documentation, de sources à modifier, saisie de commentaires pour la gestion de versions).

Les principales fonctionnalités de Mylyn sont la visualisation et la mise à jour d'une demande (description, pièces jointes, temps, statut, commentaires…), le préremplissage du commentaire lorsque l'on pousse les sources sur un gestionnaire de versions et le contexte. Le contexte est l'association d'un certain nombre de fichiers à une tâche. En fait, Mylyn retient les fichiers auxquels le développeur accède durant l'exécution d'une tâche. Cela est visible dans le contexte de la tâche et peut être partagé dans le gestionnaire de tâches. De plus depuis la version 3.5, Mylyn comporte un connecteur avec les serveurs d'intégration continue Hudson et Jenkins permettant de visualiser les résultats des constructions.

Dans cet article, nous allons voir l'intégration de Mylyn avec Redmine. Les codes source seront poussés sous Gitblit. Ces sources seront récupérées dans Jenkins pour que le projet soit construit. Et nous visualiserons les résultats des constructions dans Mylyn.

Si vous avez besoin d'aide sur Gitblit ou Redmine, nous pouvez consulter les articles suivants : Tutoriel sur la mise en place d'un entrepôt distant GIT à partir de l'outil GITBlit et Installation du gestionnaire de projets Redmine sous Windows.

II. CRÉATION DES DONNÉES D'EXEMPLE

II-A. Création des données d'exemple dans Gitblit

II-A-1. Création de l'utilisateur dans Gitblit

Créer dans Gitblit l'utilisateur qui sera utilisé depuis Eclipse pour pousser les sources (dans cet exemple, l'utilisateur est « rpouiller » et il a un e‑mail chez Google).

Image non disponible

II-A-2. Création du dépôt dans Gitblit

Créer dans Gitblit le dépôt où seront poussées les sources (dans cet exemple, le dépôt s'appelle « exempleMylyn » et l'utilisateur « rpouiller » a tous les droits dessus).

Image non disponible
Image non disponible
Image non disponible

II-B. Création des données d'exemple dans Redmine

II-B-1. Création de l'utilisateur dans Redmine

Dans Redmine (dans « Administration »/« Utilisateurs »), cliquer sur « Nouvel utilisateur ».

Image non disponible

Saisir les informations et cliquer sur le bouton « Créer » (dans l'exemple un identifiant « regis » avec la même adresse e‑mail que celui de Gitblit).

Image non disponible

On peut remarquer que la seule valeur qui est semblable entre l'utilisateur sous Gitblit et celui sous Redmine c'est l'adresse e‑mail. C'est l'adresse e‑mail qui est utilisée par Redmine pour associer automatiquement ces deux utilisateurs (toutefois, il est possible d'associer manuellement un utilisateur Redmine et un utilisateur Gitblit comme évoqué dans le chapitre IV-JVisualisation des sources dans Redmine).

II-B-2. Création du projet dans Redmine

Dans Redmine (dans « Projets »), cliquer sur « Nouveau projet ».

Image non disponible

Saisir les informations et cliquer sur le bouton « Créer ».

Image non disponible

Cliquer sur l'onglet « Membres » afin de sélectionner des membres.

Image non disponible

Rajouter l'utilisateur Redmine que l'on vient de créer dans les membres du projet.

Image non disponible

III. INSTALLATION DE LA CONNEXION ENTRE REDMINE ET MYLYN

La connexion entre Redmine et Mylyn nécessite un connecteur pour Mylyn dans Redmine et un connecteur pour Redmine dans Mylyn.

III-A. Plugin Redmine : Mylyn Connector

Dans le dossier « plugins » de l'installation de Redmine, exécuter les commandes suivantes :

 
CacherSélectionnez
D:\redmine\redmine\plugins>git clone git://github.com/ajacques/redmine_mylyn_connector.git
Cloning into 'redmine_mylyn_connector'...
remote: Reusing existing pack: 1556, done.
remote: Counting objects: 156, done.
remote: Compressing objects: 100% (93/93), done.
rRemote: Total 1712 (delta 69), reused 124 (delta 50)eceiving objects:  98% (1678/1712), 236.00 KiB

Receiving objects: 100% (1712/1712), 241.08 KiB | 221.00 KiB/s, done.
Resolving deltas: 100% (800/800), done.
Checking connectivity... done.

D:\redmine\redmine\plugins>cd ..

D:\redmine\redmine>bundle install --without development test
Using rake (10.1.1)
Using i18n (0.6.9)
Using multi_json (1.8.4)
Using activesupport (3.2.16)
Using builder (3.0.0)
Using activemodel (3.2.16)
Using erubis (2.7.0)
Using journey (1.0.4)
Using rack (1.4.5)
Using rack-cache (1.2)
Using rack-test (0.6.2)
Using hike (1.2.3)
Using tilt (1.4.1)
Using sprockets (2.2.2)
Using actionpack (3.2.16)
Using mime-types (1.25.1)
Using polyglot (0.3.3)
Using treetop (1.4.15)
Using mail (2.5.4)
Using actionmailer (3.2.16)
Using arel (3.0.3)
Using tzinfo (0.3.38)
Using activerecord (3.2.16)
Using activeresource (3.2.16)
Using coderay (1.1.0)
Using daemons (1.1.9)
Using eventmachine (1.0.3)
Using rack-ssl (1.3.3)
Using json (1.8.1)
Using rdoc (3.12.2)
Using thor (0.18.1)
Using railties (3.2.16)
Using jquery-rails (2.0.3)
Using net-ldap (0.3.1)
Using pg (0.17.1)
Using ruby-openid (2.3.0)
Using rack-openid (1.4.1)
Using bundler (1.5.2)
Using rails (3.2.16)
Using rmagick (2.13.2)
Using thin (1.3.1)
Your bundle is complete!
Gems in the groups development and test were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.

D:\redmine\redmine>
Lors de mes différents tests, cela a fonctionné comme indiqué ci-dessus.
Toutefois (suite à un retour de lecteur) dans certains cas, il peut-être nécessaire d'utiliser la commande
 
CacherSélectionnez
bundle install
au lieu de la commande
 
CacherSélectionnez
bundle install --without development test

Redémarrer le service de Redmine et le serveur web Apache.

Le plugin est visible dans Redmine (dans « Administration » / « Plugins »)

Image non disponible

Il faut également activer l'API REST de Redmine (dans « Administration » / « Configuration » / « Authentification »).

Image non disponible

III-B. Plugin Mylyn : Redmine Connector

Télécharger le zip du plugin depuis la page https://github.com/ljader/redmine-mylyn-plugin (depuis le lien de « Download latest build version of plugin as p2 repo from link: ZIP with built plugin as P2 repo » de la partie « Installation »).

Dans Eclipse, aller dans le menu « Help » / « Install New Software… ».

Image non disponible

Cliquer sur le bouton « Add… ».

Image non disponible

Sélectionner le zip précédemment téléchargé.

Image non disponible

Cocher « Mylyn Integration ». Puis cliquer sur le bouton « Next > ».

Image non disponible

Vous pouvez obtenir le message ci-dessous :

 
Sélectionnez
Cannot complete the install because one or more required items could not be found.
  Software being installed: Mylyn Connector: Redmine 0.4.0.201309270836 (net.sf.redmine_mylyn.feature.feature.group 0.4.0.201309270836)
  Missing requirement: Logback Native SLF4J Logger Module 0.9.27.v20110224-1110 (ch.qos.logback.slf4j 0.9.27.v20110224-1110) requires 'bundle org.slf4j.api [1.6.1,1.7.0)' but it could not be found
  Cannot satisfy dependency:
    From: Mylyn Connector: Redmine 0.4.0.201309270836 (net.sf.redmine_mylyn.feature.feature.group 0.4.0.201309270836)
    To: ch.qos.logback.slf4j [0.9.27.v20110224-1110]

Si cela se produit, il faut copier le fichier org.slf4j.api_1.6.4.v20120130-2120.jar dans le dossier « plugins » de Eclipse et recommencer après avoir relancé Eclipse.

Cliquer sur le bouton « Next > ».

Image non disponible

Sélectionner « I accept the terms of the license agreement ». Puis, cliquer sur le bouton « Finish ».

Image non disponible

Cliquer sur le bouton « OK ».

Image non disponible

Attendre la fin de l'installation.

Image non disponible

Cliquer sur le bouton « Yes ».

Image non disponible

IV. UTILISATION DE MYLYN ET REDMINE

IV-A. Ajout du dépôt de tâches de Redmine dans Mylyn

Faire un clic droit dans la vue « Task Repositories » et choisir « Add Task Repository… ».

Image non disponible

Sélectionner « Redmine (supports Redmine 1.0 with enabled REST-API and Mylyn-Plugin) » et cliquer sur le bouton « Next > ».

Image non disponible

Saisir les informations et cliquer sur le bouton « Validate Settings ».

Image non disponible

Cliquer sur le bouton « Finish ».

Image non disponible

Cliquer sur le bouton « No ».

Image non disponible

Le nouveau dépôt de tâches a été rajouté.

Image non disponible

IV-B. Création d'une requête pour afficher les tâches

Faire un clic droit dans la vue « Task List » et choisir « New » / « Query… ».

Image non disponible

Sélectionner « Redmine » et cliquer sur le bouton « Next > ».

Image non disponible

Cliquer sur le bouton « Next > ».

Image non disponible

Saisir les critères et cliquer sur le bouton « Finish ».

Image non disponible

La requête apparaît dorénavant dans la vue « Task List ».

Image non disponible

IV-C. Création d'une demande dans Redmine

Dans l'onglet « Nouvelle demande », saisir les informations et cliquer sur le bouton « Créer ».

Image non disponible

La demande a été créée.

Image non disponible

IV-D. Traitement de la demande dans Eclipse

La demande est visible sous Eclipse après une synchronisation (manuelle ou automatique). Il est possible de visualiser le détail de tâche en double-cliquant dessus.

Image non disponible

Lorsque l'on commence à travailler sur une demande, il faut activer cette tâche en effectuant un clic droit sur la tâche et choisissant « Activate ».

Image non disponible

Indiquer que la demande est en cours en cliquant sur la tâche et sélectionnant « Mark as »/« En cours ». Ensuite, cliquer sur le bouton « Submit » du détail de la tâche.

Image non disponible

Le changement de statut apparaît dans Redmine.

Image non disponible

Lorsque l'on pousse les sources vers le gestionnaire de versions, le commentaire est rempli automatiquement avec les informations fournies par Mylyn.

Image non disponible

Il faut mettre à jour le « Done ratio » et le « Status ».

Image non disponible

Il est également possible de saisir un temps de travail avant de soumettre la mise à jour en cliquant sur le bouton « Submit ».

Image non disponible

Après il faut désactiver cette tâche en effectuant un clic droit sur la tâche et choisissant « Desactivate ».

Image non disponible

IV-E. Clôture de la demande dans Redmine

Les changements apparaissent dans Redmine.

Image non disponible

Il est possible de mettre à jour le statut en « Fermé ».

Image non disponible

Le résultat après mise à jour.

Image non disponible

IV-F. Cas de demandes plus complexes

Créer la demande suivante « Transformation en majuscules » ainsi que les sous-tâches (il n'est pas nécessaire de saisir le temps estimé de la tâche parente : il sera calculé en fonction de ceux des tâches enfants).

Image non disponible

Ci-dessous les deux tâches enfants « Classe utilitaire de transformation » et « Test de la transformation ».

Image non disponible
Image non disponible

Créer la demande suivante « Classe principale (main) appelant la transformation en majuscules » liée à la tâche « Transformation en majuscules ».

Image non disponible

Cela donne le diagramme de Gantt suivant.

Image non disponible

Lorsque la tâche « Classe utilitaire de transformation » est résolue à 100 %, cela donne le diagramme de Gantt suivant.

Image non disponible

IV-G. Ajout d'un commentaire depuis Mylyn

Il est possible directement depuis Mylyn de rajouter un commentaire à la demande.

Image non disponible

Le commentaire est visible dans Redmine.

Image non disponible

IV-H. Ajout d'une pièce jointe depuis Mylyn

Mylyn permet d'attacher une pièce jointe simple (bouton « Attach… ») ou à partir d'une capture d'écran (bouton « Attach Screenshoot… »).

Image non disponible

Après avoir ajouté la pièce jointe, il suffit de la soumettre en cliquant sur le bouton « Submit ».

Image non disponible

La pièce jointe est accessible dans Redmine.

Image non disponible

IV-I. Contexte Mylyn

Une fonctionnalité très intéressante de Mylyn est le contexte. Le contexte permet de connaître les fichiers correspondant (c'est-à-dire créés ou modifiés) à une tâche donnée.

Image non disponible

Mylyn permet d'attacher le contexte à la tâche.

Image non disponible

Le contexte est transmis à Redmine sous forme de fichier zip. Toute personne travaillant par la suite sur cette tâche aura accès au contexte.

Image non disponible

IV-J. Visualisation des sources dans Redmine

Dans le dossier de l'installation de Redmine, exécuter les commandes suivantes afin de cloner le dépôt :

 
CacherSélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
D:\redmine\redmine>md repos

D:\redmine\redmine>cd repos

D:\redmine\redmine\repos>git clone --bare git://localhost/exempleMylyn.git exempleMylyn.git
Cloning into bare repository 'exempleMylyn.git'...
remote: Counting objects: 27, done
remote: Finding sources: 100% (27/27)
remote: Getting sizes: 100% (23/23)
remote: Total 27 (delta 0), reused 27 (delta 0)
Receiving objects: 100% (27/27), done.

Dans « Configuration »/« Dépôts » du projet, cliquer sur « Nouveau dépôt ».

Image non disponible

Saisir les informations et cliquer sur le bouton « Créer ».

Image non disponible

Le dépôt est maintenant configuré. Le lien « Utilisateurs » permet d'associer manuellement un utilisateur Git (ici Gitblit) à un utilisateur Redmine.

Image non disponible

Les modifications des sources sont maintenant visibles dans « Dépôt » du projet.

Image non disponible

Les commandes suivantes permettent de récupérer les dernières versions de sources (il est souhaitable de planifier un lancement régulier de cette commande).

 
CacherSélectionnez
1.
2.
3.
4.
5.
6.
7.
D:\redmine\redmine\repos\exempleMylyn.git>git fetch
From git://localhost/exempleMylyn
 * branch            HEAD       -> FETCH_HEAD

D:\redmine\redmine\repos\exempleMylyn.git>git reset --soft FETCH_HEAD

D:\redmine\redmine\repos\exempleMylyn.git>

V. INSTALLATION DE JENKINS ET CREATION DU JOB

V-A. Installation de Jenkins

Pour cet article, j'ai choisi Jenkins mais cela fonctionne de manière similaire avec Hudson (testé avec la version 3.1.1).

Au moment de la rédaction de cet article, la dernière version LTS (Long-Term Support Release) de Jenkins est 1.532.1. Mais cette version ne fonctionne pas correctement avec Mylyn (lorsque l'on lance une construction, elle est bien lancée mais Mylyn affiche un message d'erreur). Aussi, j'utilise la version 1.509.1.

Pour installer Jenkins, il faut copier le fichier « jenkins.war » dans le dossier « webapps » de Tomcat.

Jenkins est accessible à l'adresse http://localhost:8080/jenkins.

Image non disponible

V-B. Installation du plugin Git dans Jenkins

Par défaut, Jenkins ne permet pas de récupérer des sources depuis une dépôt de la famille Git. Il est donc nécessaire d'installer le plugin (en fait deux plugins).

Cliquer sur le lien « Administrer Jenkins ».

Image non disponible

Normalement, il serait bien de régler le premier warning sur l'encodage UTF-8. Mais nous ne le verrons pas ici pour ne pas surcharger cet article.

Cliquer sur le lien « Gestion des plugins ».

Image non disponible

Sélectionner l'onglet « Disponibles » et entrer le filtre « git ».

Image non disponible

Sélectionner « Git Client Plugin » et « Git Plugin ». Puis, cliquer sur le bouton « Download now and install after restart ».

Image non disponible

L'installation s'effectue.

Image non disponible

Redémarrer le serveur Tomcat (normalement le redémarrage de l'application Jenkins suffit).

Les plugins sont installés.

Image non disponible

V-C. Configuration du JDK et de Maven

Cliquer sur le lien « Administrer Jenkins ».

Image non disponible

Cliquer sur le lien « Configurer le système ».

Image non disponible

Cliquer sur le bouton « Ajouter JDK ».

Image non disponible

Renseigner les champs « Nom » (comme dans Continuum, il est possible d'installer plusieurs JDK, cela permet de les distinguer) et « JAVA_HOME » (après avoir décocher « Install automatically »).

Image non disponible

Cliquer sur le bouton « Ajouter Maven ».

Image non disponible

Renseigner les champs « Nom » et « MAVEN_HOME » (après avoir décoché « Install automatically »). Puis, cliquer sur le bouton « Enregistrer ».

Image non disponible

V-D. Création du job

Cliquer sur le lien « Nouveau Job ».

Image non disponible

Nommer le job (ici « Exemple ») à créer et sélectionner « Construire un projet maven2/3 ». Puis, cliquer sur le bouton « OK ».

Image non disponible

Sélectionner la gestion de code source Git, indiquer l'URL du dépôt et le chemin du POM Racine. Puis, cliquer sur le bouton « Sauver ».

Image non disponible

Tester le job en cliquant sur le lien « Lancer un build ».

Image non disponible

La construction est en cours.

Image non disponible

Au bout d'un moment, la construction s'achève avec succès.

Image non disponible

En survolant la construction, un menu apparaît. Choisir « Sortie Console ».

Image non disponible

Ci-dessous, la trace de Maven indique « BUILD SUCCESSFUL ».

Image non disponible

VI. UTILISATION DE MYLYN ET JENKINS

VI-A. Ajout du serveur Jenkins dans Mylyn

Dans la vue « Builds », choisir « Add Build Server… » dans le menu de l'icône d'ajout d'un serveur (ou cliquer directement sur l'icône d'ajout).

Image non disponible

Sélectionner « Hudson (supports Jenkins) » et cliquer sur le bouton « Next > ».

Image non disponible

Comme pour Redmine, entrer l'URL et un nom (nous n'avons pas activé l'authentification sur Jenkins alors elle n'est pas nécessaire dans cet article). Puis cliquer que le bouton « Validate ».

Image non disponible

Une fois que le serveur est validé, sélectionner le projet « Exemple ». Puis, cliquer que le bouton « Finish ».

Image non disponible

Le serveur et le projet sont maintenant visibles dans la vue.

Image non disponible

VI-B. Lancement d'une construction depuis Mylyn

Faire un clic droit sur le projet et choisir « Run Build ».

Image non disponible

On peut voir la construction dans Jenkins.

Image non disponible

VI-C. Visualisation de l'historique des constructions

Faire un clic droit sur le projet et choisir « History ».

Image non disponible

La vue « Historique » affiche les différentes constructions avec leur résultat. Le double-clic sur une construction affiche les détails de cette construction.

Image non disponible

VI-D. Visualisation de la trace d'exécution

Le clic sur le lien « Show output in Console » affiche la trace d'exécution dans la vue « console ».

Image non disponible

VI-E. Visualisation de la trace d'exécution

Le clic sur le lien « Show test results in JUnit View » affiche les résultats des tests JUnit dans la vue « JUnit ».

Image non disponible

VI-F. Création d'une tâche dans Redmine depuis les résultats de Jenkins

Faire un clic droit sur un test et choisir « New Task from Failure… ».

Image non disponible

Choisir « Redmine » et choisir « Finish ».

Image non disponible

La description est remplie en automatique.

Image non disponible

Entrer le titre et cliquer sur le bouton « Submit ».

Image non disponible

On retrouve la tâche dans Redmine. Le boucle est bouclée.

Image non disponible

VII. CONCLUSION

Cet article est centré sur l'association de Mylyn avec Redmine et Jenkins. Il ne montre pas d'autres fonctionnalités de Redmine : gestion de la documentation, wiki, forums, etc. Par ailleurs, Redmine peut être connecté avec un logiciel d'intégration continue comme Jenkins afin que les résultats des constructions soient visibles dans Redmine (grâce à ce plugin). Il ne montre pas non plus des aspects importants de l'administration de Jenkins comme l'encodage UTF-8 et la sécurité (miniliste non exhaustive).

Nous avons pu voir que ces associations entre Mylyn, Redmine et Jenkins permettent de simplifier la communication dans un projet et sa gestion. Le diagramme ci-dessous donne un aperçu des flux évoqués dans cet article. Dans cet exemple, sur chaque poste développeur, on installe un Eclipse packagé (installation simplifiée et homogénéité des postes). Dans ce package, on trouve Mylyn (inclus dans Eclipse) configuré avec le connecteur Redmine, le dépôt de tâches et Jenkins.

Image non disponible

De plus, Mylyn, Redmine et Jenkins (associé avec un gestionnaire de versions) peuvent être une solution intéressante (sans prétendre à les résoudre complètement) à plusieurs points du test de Joël : « Utilisez-vous un système de gestion de code source ? » (amélioration de la qualité des commentaires), « Pouvez-vous faire un build en une seule étape ? » (l'intégration continue implique une construction automatisée), « Faites-vous des builds quotidiens ?  » (l'intégration continue est planifiable et les anomalies peuvent être remontées dans Mylyn), « Avez-vous une base de données de bogues ? », « Avez-vous un planning à jour ? » (saisie des temps dans Mylyn puis remontée dans Redmine), « Avez-vous une spec ? » (rédaction dans le wiki, publication de documentation) et « Les programmeurs bénéficient-ils d'un environnement de travail calme ? » (l'objectif est de détourner au minimum le développeur des tâches non productives).

VIII. REMERCIEMENTS

Je remercie très sincèrement :

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

  

Copyright © 2013 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.