Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

M2 — Gestion de projet Redmine

APERTO-NOTA

Module M2 — Gestion de projet (Jour 2 matin — 3h30)

Prérequis : instance configurée par M1 — rôles, trackers, workflow et activités en place
Objectif : créer et piloter un projet Redmine, gérer ses membres et produire des rapports de temps


Exercice 01 - Création et structuration du projet

Solution to Exercise 1 #

Menu : Projets → Nouveau projet

  1. Renseigner les champs Nom et Identifiant — l’identifiant est généré automatiquement à partir du nom, vérifier qu’il correspond à gestion-sinistres

  2. Dans la section Modules, cocher : Suivi des demandes, Wiki, Documents, Suivi du temps, Fichiers

  3. Sauvegarder

Pour le sous-projet : répéter l’opération, puis dans le champ Projet parent sélectionner Gestion des sinistres.

Vérifier dans la liste des projets que gestion-sinistres-batch apparaît en retrait sous gestion-sinistres.


Exercice 02 - Affectation des membres et des rôles

Solution to Exercise 2 #

Menu : Projet gestion-sinistresParamètres → onglet MembresNouveau membre

  1. Sélectionner l’utilisateur dans la liste déroulante

  2. Sélectionner le rôle correspondant

  3. Cliquer Ajouter — répéter pour les 3 comptes

Vérification par compte :

CompteCe qui doit être visibleCe qui ne doit pas l’être
cda.dupontParamètres projet, tous les tickets, tous les tempsAdministration
dev.martinSes tickets, saisie de tempsParamètres projet, gestion membres
client.durandListe des tickets, création de demandeTemps des autres, paramètres

Exercice 03 - Création des versions (jalons)

Solution to Exercise 3 #

Menu : Projet → Paramètres → onglet VersionsNouvelle version

Pour chaque version :

  1. Saisir le nom (Sprint 1, Sprint 2)

  2. Définir la date d’échéance

  3. Statut : Ouvert

  4. Sauvegarder

Vérifier via Menu : Projet → Roadmap — les 2 versions doivent apparaître avec leur date et le compteur de demandes (0 pour l’instant).


Exercice 04 - Création d’un lot de demandes fil rouge

Solution to Exercise 4 #

Voie A — interface web

Menu : Projet → Nouveau ticket

Pour chaque demande, renseigner dans l’ordre : Tracker, Sujet, Priorité, Assigné à, Version cible.

Voie B — import CSV

Menu : Projet → Suivi des demandes → Importer → téléverser demandes-import.csv

Mapper les colonnes :

Colonne CSVChamp Redmine
trackerTracker
subjectSujet
priorityPriorité
assigned_toAssigné à
fixed_versionVersion cible
descriptionDescription

Lancer l’import — Redmine affiche un récapitulatif : 6 demandes importées, 0 erreur.

Voie C — API REST

Correspondance des identifiants (vérifier dans votre instance) :

Élémentid probable
Tracker Anomalie1
Tracker Évolution2
Tracker Demande de service3
Tracker Tâche interne4
Priorité Basse1
Priorité Normale2
Priorité Haute3
Priorité Urgente4

Récupérer ID_DEV_MARTIN et les ID_SPRINT1 / ID_SPRINT2 depuis les appels de contrôle indiqués dans l’exercice, puis créer les 6 demandes en adaptant les paramètres.

Vérification commune : Menu Projet → Suivi des demandes → appliquer les filtres suivants :

  • Filtre Version = Sprint 1 → doit retourner 4 demandes

  • Filtre Tracker = Anomalie → doit retourner 3 demandes

  • Filtre Priorité = Urgente → doit retourner 2 demandes


Exercice 05 - Mise en place de la documentation projet (Wiki)

Solution to Exercise 5 #

Menu : Projet → WikiModifier (page Accueil générée automatiquement)

Contenu de la page Accueil (exemple) :

# Formation Redmine

Bienvenue sur le wiki du projet.

- [[Procedure-Incident|Procédure de gestion des incidents]]
- [[Contacts|Annuaire des interlocuteurs]]

Contenu de la page Procedure-Incident :

# Procédure de qualification d'une anomalie

## Étape 1 — Réception
Vérifier la complétude du signalement : environnement, reproductibilité, impact.

## Étape 2 — Qualification
Affecter un tracker, une priorité et une version cible.

## Étape 3 — Assignation
Affecter à un développeur et passer le statut en "En cours".

Contenu de la page Contacts :

| Nom | Rôle | Email |
|---|---|---|
| Dupont | Chef de projet | cda.dupont@example.com |
| Martin | Développeur | dev.martin@example.com |
| Durand | Client | client.durand@example.com |

Vérifier que le lien [[Procedure-Incident]] depuis la page Accueil est cliquable et navigue vers la bonne page.


Exercice 06 - Consultation et analyse des temps (simulation)

Solution to Exercise 6 #

Voie A — interface

Menu Projet → Suivi du temps → Nouvelle entrée de temps

Pour chaque entrée : sélectionner la demande, saisir la durée (format 2 ou 2.5), choisir l’activité, ajouter un commentaire optionnel.

Voie B — API REST

Réponse attendue de enumerations/time_entry_activities.json (ids probables selon configuration M1 EX-07) :

activity_idActivité
1Développement
2Recette / Tests
3Réunion
4Documentation
5Support / Assistance

Les 3 entrées à créer :

# 2h Développement sur "Erreur 500"
curl -X POST `
     -H "X-Redmine-API-Key: VOTRE_CLE_API" `
     -H "Content-Type: application/json" `
     -d "{\"time_entry\": {\"issue_id\": ID_ERREUR500, \"hours\": 2, \"activity_id\": 1, \"comments\": \"Correction du module facturation\"}}" `
     http://localhost:3000/time_entries.json

# 0.5h Support sur "Réinitialisation MDP"
curl -X POST `
     -H "X-Redmine-API-Key: VOTRE_CLE_API" `
     -H "Content-Type: application/json" `
     -d "{\"time_entry\": {\"issue_id\": ID_MDP, \"hours\": 0.5, \"activity_id\": 5, \"comments\": \"Réinitialisation effectuée\"}}" `
     http://localhost:3000/time_entries.json

# 1h Documentation sur "MAJ documentation API"
curl -X POST `
     -H "X-Redmine-API-Key: VOTRE_CLE_API" `
     -H "Content-Type: application/json" `
     -d "{\"time_entry\": {\"issue_id\": ID_DOC, \"hours\": 1, \"activity_id\": 4, \"comments\": \"Mise à jour endpoints REST\"}}" `
     http://localhost:3000/time_entries.json

Résultats attendus après filtrage :

FiltreRésultat attendu
Activité = Développement2h sur “Erreur 500”
Activité = Support / Assistance0,5h sur “Réinitialisation MDP”
Version = Sprint 12,5h (Erreur 500 + Réinitialisation MDP)
Utilisateur = dev.martinTotal des 3 entrées = 3,5h

Résultat attendu de la consultation API (time_entries.json?project_id=gestion-sinistres) :

{
  "time_entries": [
    {"id": 1, "hours": 2.0, "activity": {"name": "Développement"}, "issue": {"id": ID_ERREUR500}},
    {"id": 2, "hours": 0.5, "activity": {"name": "Support / Assistance"}, "issue": {"id": ID_MDP}},
    {"id": 3, "hours": 1.0, "activity": {"name": "Documentation"}, "issue": {"id": ID_DOC}}
  ],
  "total_count": 3
}

Exercices avancés


Exercice 07 - Requêtes et filtres personnalisés

Solution to Exercise 7 #

Menu : Projet → Suivi des demandes → section FiltresAjouter un filtre

Anomalies urgentes Sprint 1 :

  • Tracker → est → Anomalie

  • Priorité → est → Urgente

  • Version → est → Sprint 1

  • Statut → n’est pas → Fermé

Cliquer Appliquer, puis Sauvegarder → saisir le nom → cocher PublicSauvegarder.

Vérification : se connecter avec dev.martin → Projet → Suivi des demandes → le filtre public doit apparaître dans la liste déroulante des requêtes sauvegardées.


Exercice 08 - Roadmap et suivi d’avancement

Solution to Exercise 8 #

Passage en Résolu : se connecter avec dev.martin → ouvrir la demande → modifier le statut → Sauvegarder.

Passage en Fermé : se connecter avec cda.dupont → ouvrir la demande résolue → modifier le statut → Sauvegarder.

Lecture de la Roadmap :

  • La barre de progression = (demandes fermées / total demandes de la version) × 100

  • Avec 1 demande fermée sur 4 du Sprint 1 → 25%

  • Les demandes encore ouvertes sont listées sous la barre

Lecture du Gantt :

  • Chaque demande apparaît comme une barre horizontale positionnée entre sa date de création et son échéance de version

  • Le Sprint 2 apparaît si ses demandes ont une date d’échéance définie


Exercice 09 - API REST : gestion de projet

Solution to Exercise 9 #

Réponse attendue à l’étape 2 (création version) :

{
  "version": {
    "id": 3,
    "project": {"id": 1, "name": "Gestion des sinistres"},
    "name": "Sprint 3",
    "status": "open",
    "due_date": "2026-07-31"
  }
}

L’id retourné (ici 3) est à utiliser aux étapes 4 et 5.

Étape 4 — remplacer ID_SPRINT3 par 3 et ID_DEMANDE par l’id d’une demande existante :

curl -X PUT `
     -H "X-Redmine-API-Key: VOTRE_CLE_API" `
     -H "Content-Type: application/json" `
     -d "{\"issue\": {\"fixed_version_id\": 3}}" `
     http://localhost:3000/issues/5.json

Étape 5 — récupérer l’id du Sprint 1 via l’étape 3, puis fermer :

curl -X PUT `
     -H "X-Redmine-API-Key: VOTRE_CLE_API" `
     -H "Content-Type: application/json" `
     -d "{\"version\": {\"status\": \"closed\"}}" `
     http://localhost:3000/versions/1.json

Vérification : Menu Projet → Paramètres → Versions — le Sprint 1 apparaît en statut “Fermé” et n’accepte plus de nouvelles demandes.

Erreurs fréquentes :

  • 422 sur la fermeture de version → des demandes ouvertes sont encore affectées à cette version

  • 404 sur /versions/ID → l’id est incorrect, vérifier via versions.json