Project

General

Profile

Passage a redmine » History » Version 3

Florent Torregrosa, 07/28/2013 10:42 AM
ajout toc à droite

1 1 Julien Enselme
h1. Passage à redmine
2 1 Julien Enselme
3 3 Florent Torregrosa
{{>toc}}
4 3 Florent Torregrosa
5 2 Julien Enselme
Le CRI met à disposition des élèves et des associations une forge Redmine qui permet de centraliser tout ce qui concerne drupal. Avant, le wiki était dans le wiki du ginfo, les tâches sur le portail du projet et le code dans un dépôt git sur le compte sas de assos. Il a donc été décidé de migrer le wiki, les tâches et le code dans l’interface de redmine.
6 1 Julien Enselme
7 1 Julien Enselme
h1. Migration du wiki
8 1 Julien Enselme
9 2 Julien Enselme
Le wiki a été migré à la main en copiant collant le texte de l’ancien wiki et en adaptant la syntaxe et en mettant le contenu à jour. En effet lors du passage à redmine, la version utilisée ne permettait pas de faire du rest sur le wiki (malheureusement).
10 1 Julien Enselme
11 1 Julien Enselme
h1. Migration du code
12 1 Julien Enselme
13 2 Julien Enselme
Comme il n’y avait pas de commit en dehors du commit initial, l’historique n’a pas été conservé et un nouveau dépôt vide a été créé et les scripts de l’installation y ont été ajoutés.
14 1 Julien Enselme
15 1 Julien Enselme
h1. Migration des tâches
16 1 Julien Enselme
17 2 Julien Enselme
h2. Généralités
18 2 Julien Enselme
19 2 Julien Enselme
Redmine dispose d’une API rest pour les tâches. Cette API permet de créer et de mettre à jour des tâches automatiquement. On écrit une tâche ou une mise à jour de tâche au format json ou xml et on l’injecte via les méthodes POST et PUT de http. L’authentification se fait via une clé API disponible dans le compte de l’utilisateur. Voici des exemples de commande (POST sert à créer une tâche et PUT à mettre à jour) :
20 2 Julien Enselme
<pre>
21 2 Julien Enselme
curl -X POST -v --data "@is.json" -H "Content-Type: application/json" -H "X-Redmine-API-Key: CLE" https://forge.centrale-marseille.fr/issues.json
22 2 Julien Enselme
curl -v -H "Content-Type: application/json" -X PUT --data "@3.1.json" -H "X-Redmine-API-Key: CLE" http://localhost/redmine/issues/ID_TACHE.json
23 2 Julien Enselme
</pre>
24 2 Julien Enselme
25 2 Julien Enselme
Plus d’info dans la doc de redmine :
26 2 Julien Enselme
27 2 Julien Enselme
* http://www.redmine.org/projects/redmine/wiki/Rest_api
28 2 Julien Enselme
* http://www.redmine.org/projects/redmine/wiki/Rest_Issues
29 2 Julien Enselme
30 2 Julien Enselme
h2. La méthode utilisée
31 2 Julien Enselme
32 2 Julien Enselme
Avant d’effectuer la migration en vrai, les scripts ont été testés en local avec une instance local de la forge redmine. Les modules python permettant de faire du rest n’ont pas été utilsés car ils n’ont pas donné satisfaction lors des tests préliminaires.
33 2 Julien Enselme
34 2 Julien Enselme
h3. Prérequis
35 2 Julien Enselme
36 2 Julien Enselme
Pour pouvoir exécuter les scripts, il faut :
37 2 Julien Enselme
38 2 Julien Enselme
* python3
39 2 Julien Enselme
* Les modules suivants : urllib, re, os, httplib2 (certains d’entre eux peuvent être dans votre installation de python3 (tous sauf httplib2 normalement), essayer de de les importer pour être fixé)
40 2 Julien Enselme
* Une copie du portail *avec les urls simplifiées activées et fonctionnels* du projet avec toutes les tâches. Cette copie est indispensable car :
41 2 Julien Enselme
42 2 Julien Enselme
 * Les tâches doivent être accessibles par l’utilisateur anonyme pour ne pas avoir à configurer l’authentification dans le script. On ajoute une vue qui ne sert qu’à ça.
43 2 Julien Enselme
 * Il est plus facile d’accéder aux contenus avec les clean-url.
44 2 Julien Enselme
 * Désactiver le module _book_ qui pose problème.
45 2 Julien Enselme
 * Installer les modules suivants :
46 2 Julien Enselme
47 2 Julien Enselme
  * _entity_json_ : il permet de récupérer (entre autre) la liste des commentaires d’un type de contenu à une adresse de type : @http://localhost/portail/entity_json/node/ID/json@
48 2 Julien Enselme
  * _restws_ : il permet de récupérer le contenu lui même à une adresse de type : @http://localhost/portail/node/ID.json@ ou @http://localhost/portail/comment/ID.json@. Il faut le configurer pour qu’il donne du json et pour quel type de contenu
49 2 Julien Enselme
50 2 Julien Enselme
 * Vérifier que les pages données par ces modules sont bien accessibles par l’utilisateur anonyme.
51 2 Julien Enselme
 * _pandoc_ pour transformer avec plus ou moins de succès (en général plus) le html en syntaxe wiki (textile). Voir http://johnmacfarlane.net/pandoc/ pour plus d’infos.
52 2 Julien Enselme
 * Faire des dictionnaires de correspondance entre les noms des champs de la tâche drupal et et les clés de la demande redmine.
53 2 Julien Enselme
54 2 Julien Enselme
55 2 Julien Enselme
56 2 Julien Enselme
h3. Les scripts
57 2 Julien Enselme
58 2 Julien Enselme
Pour migrer les tâches, nous avons écrit un script python disponible dans le dépôt dans source:scripts_divers/migrer_taches_vers_redmine/ et s’appelle _goto_redmine.py_. Ce dossier contient également :
59 2 Julien Enselme
* source:scripts_divers/migrer_taches_vers_redmine/goto_redmine.py : le script qui effectue la migration.
60 2 Julien Enselme
* source:scripts_divers/migrer_taches_vers_redmine/url_parser.py : module du script qui parse une vue de drupal. Cette vue liste les id de toutes les tâches.
61 2 Julien Enselme
* source:scripts_divers/migrer_taches_vers_redmine/cmd : qui récapitule les commandes données ci-dessus.
62 2 Julien Enselme
* Le dossier  source:scripts_divers/migrer_taches_vers_redmine/exemples_json qui contient des exemples de tâches et de commentaires au format json pour savoir comment doivent être écrites ces données.
63 2 Julien Enselme
64 2 Julien Enselme
Normalement le script est suffisamment commenté pour être compris par quelqu’un ayant fait du python. Il faut néanmoins faire attention aux points suivant :
65 2 Julien Enselme
66 2 Julien Enselme
* json.load() : charge un json depuis un objet fichier alors que json.loads() transforme une chaîne de caractère formatée comme un dictionnaire en dictionnaire.
67 2 Julien Enselme
* doc utile :
68 2 Julien Enselme
69 2 Julien Enselme
 * "httplib2":https://code.google.com/p/httplib2/
70 2 Julien Enselme
 * "urllib.request":http://docs.python.org/dev/library/urllib.request.html