Module M1 — Administration (Jour 1 — 7h)¶
Public : gestionnaire(s) de l’instance
Objectif : installer, configurer et administrer une instance Redmine 5.1.12 prête à l’emploi
Vérifier que les deux conteneurs sont en cours d’exécution :
docker psRésultat attendu :
CONTAINER ID IMAGE STATUS PORTS
xxxxxxxxxxxx redmine:5.1.12 Up X minutes 0.0.0.0:3000->3000/tcp
xxxxxxxxxxxx postgres:15 Up X minutesEn cas d’erreur, consulter les logs :
docker compose logs redmine
docker compose logs dbErreurs fréquentes :
Port 3000 déjà utilisé → modifier
"3000:3000"en"3001:3000"dans ledocker-compose.ymlWSL2 non activé → Panneau de configuration → Activer les fonctionnalités Windows → Sous-système Windows pour Linux
Onglet Général
| Champ | Valeur |
|---|---|
| Titre de l’application | Redmine - Dupont (exemple) |
| Formatage du texte | CommonMark Markdown (GitHub Flavored) |
| Nom d’hôte et chemin | localhost:3000 |
| Protocole | HTTP |
Onglet Affichage
| Champ | Valeur |
|---|---|
| Langue par défaut | Français |
| Forcer la langue pour les utilisateurs identifiés | coché |
| Format de date | Basé sur la langue de l’utilisateur |
| Format d’heure | Basé sur la langue de l’utilisateur |
| Format des temps en heures | 0:45 h |
Onglet Authentification
| Champ | Valeur |
|---|---|
| Authentification obligatoire | Non, autoriser l’accès anonyme aux projets publics |
| Inscription des nouveaux utilisateurs | activation manuelle du compte |
| Longueur minimum des mots de passe | 8 |
| Double authentification | optionnel |
Onglet API
| Champ | Valeur |
|---|---|
| Activer l’API REST | coché |
| Activer le support JSONP | non coché |
Onglet Projets
| Champ | Valeur |
|---|---|
| Définir les nouveaux projets comme publics par défaut | décoché |
| Modules activés par défaut | Suivi des demandes, Suivi du temps passé, Wiki, Publication de documents, Publication de fichiers |
| Trackers par défaut | Anomalie, Évolution |
| Rôle donné à un utilisateur non-administrateur qui crée un projet | Chef de projet |
Onglet Utilisateurs
Laisser les valeurs par défaut :
Option de notification par défaut : Seulement pour ce que je surveille
Fuseau horaire : aucun (basé sur le navigateur)
Onglet Suivi des demandes
| Champ | Valeur |
|---|---|
| Autoriser les relations entre demandes de différents projets | coché |
| Fermer les doublons automatiquement | coché |
| Jours non travaillés | samedi, dimanche |
| Attributs des tâches parentes | Calculé à partir des sous-tâches (début, échéance, priorité, % réalisé) |
Onglet Suivi du temps
| Champ | Valeur |
|---|---|
| Champs obligatoires pour les temps passés | Demande cochée |
| Maximum d’heures par jour | 999 (laisser par défaut) |
Onglet Fichiers
Laisser les valeurs par défaut (5120 ko max par fichier, 102400 ko en upload groupé).
Cliquer Sauvegarder après chaque onglet — recharger la page pour vérifier le titre et la langue.
Solution to Exercise (EX-03 — Création des trackers) #
Menu : Administration → Trackers → Nouveau tracker
Pour chaque tracker :
Saisir le nom
Décocher les champs non souhaités dans la section “Champs activés”
Laisser cochés : Assigné à, Version cible, Temps estimé
Sauvegarder
L’ordre d’affichage se règle avec les flèches haut/bas dans la liste des trackers après création.
Statuts : Administration → Statuts des demandes → Nouveau statut
Cocher “Statut fermé” uniquement pour Fermé et Rejeté.
Workflow : Administration → Workflow → sélectionner Tracker = Anomalie, Rôle = Développeur → Modifier
Dans la matrice, cocher les cases correspondant aux transitions autorisées (lignes = statut courant, colonnes = statut cible) :
| Nouveau | En cours | En attente client | Résolu | Fermé | Rejeté | |
|---|---|---|---|---|---|---|
| Nouveau | — | ✅ | ✅ | |||
| En cours | — | ✅ | ✅ | |||
| En attente client | ✅ | — | ✅ | |||
| Résolu | ✅ | — | ✅ |
Sauvegarder, puis vérifier en se connectant avec dev.martin et en changeant le statut d’une demande.
Menu : Administration → Rôles et permissions → Nouveau rôle
Permissions clés à cocher par rôle :
Chef de projet
Gestion du projet : Gérer les membres, Gérer les versions
Suivi des demandes : Voir, Créer, Modifier, Supprimer, Gérer les catégories
Suivi du temps : Voir les entrées de temps (tous les utilisateurs), Saisir les temps
Développeur
Suivi des demandes : Voir, Créer, Modifier ses propres demandes
Suivi du temps : Saisir les temps, Voir ses propres entrées
Client
Suivi des demandes : Voir, Créer uniquement
Suivi du temps : aucune permission
Menu : Administration → Utilisateurs → Nouveau utilisateur
Pour chaque compte :
Renseigner Login, Prénom, Nom, Email (fictif)
Définir un mot de passe temporaire (ex :
Formation2026!)Cocher Doit changer son mot de passe à la prochaine connexion
Statut : Actif
Sauvegarder
Vérifier dans Administration → Utilisateurs que les 3 comptes apparaissent avec le statut “Actif”.
Menu : Administration → Activités (suivi du temps) → Nouvelle activité
Pour chaque activité : saisir le nom, laisser “Active” coché.
Définir “Développement” comme activité par défaut (cocher la case correspondante).
Vérifier en allant sur un projet → Suivi du temps → Nouvelle entrée : la liste déroulante “Activité” doit afficher les 5 entrées.
Exercices avancés¶
Répéter l’opération pour chaque combinaison Tracker / Rôle :
Administration → Workflow → sélectionner le tracker et le rôle → Modifier
Évolution / Client — seule case à cocher :
| Fermé | |
|---|---|
| Résolu | ✅ |
Tâche interne / Client — aucune case cochée (matrice vide).
Astuce : utiliser le bouton Copier du workflow pour dupliquer la configuration d’un rôle vers un autre et n’ajuster que les différences.
Vérification rapide sans changer de session : Administration → Workflow → sélectionner le tracker et le rôle → Consulter (mode lecture seule).
Réponse attendue à l’étape 2 (création de demande) :
{
"issue": {
"id": 42,
"project": {"id": 1, "name": "Formation Redmine"},
"tracker": {"id": 1, "name": "Anomalie"},
"status": {"id": 1, "name": "Nouveau"},
"priority": {"id": 2, "name": "Normale"},
"subject": "Anomalie creee via API"
}
}Réponse attendue à l’étape 4 : code HTTP 200 OK — corps vide. Vérifier dans l’interface que le statut est bien “En cours” et que la note apparaît dans l’historique.
Erreurs fréquentes :
401 Unauthorized→ clé API incorrecte ou API REST non activée422 Unprocessable Entity→ champ obligatoire manquant (vérifiertracker_id,subject)404 Not Found→project_idouissue idincorrect
Récupérer les tracker_id de votre instance :
curl -H "X-Redmine-API-Key: VOTRE_CLE_API" `
http://localhost:3000/trackers.jsonDurée : 20 min
Menu : Administration → Utilisateurs → Import
Préparer le fichier CSV
Créer un fichier utilisateurs-import.csv :
login,firstname,lastname,mail,password
dev.bernard,Marc,Bernard,m.bernard@example.com,Redmine2026!
dev.chevalier,Lucie,Chevalier,l.chevalier@example.com,Redmine2026!
dev.fontaine,Paul,Fontaine,p.fontaine@example.com,Redmine2026!
cda.garcia,Ana,Garcia,a.garcia@example.com,Redmine2026!
cda.henry,Jean,Henry,j.henry@example.com,Redmine2026!
client.imbert,Claire,Imbert,c.imbert@example.com,Redmine2026!
client.joubert,Luc,Joubert,l.joubert@example.com,Redmine2026!
client.klein,Emma,Klein,e.klein@example.com,Redmine2026!
dev.lambert,Pierre,Lambert,p.lambert@example.com,Redmine2026!
cda.moreau,Julie,Moreau,j.moreau@example.com,Redmine2026!Procédure d’import
Menu : Administration → Utilisateurs → bouton Import
Sélectionner le fichier
utilisateurs-import.csvParamètres : séparateur
,— encodageUTF-8Mapper les colonnes aux champs Redmine
Lancer l’import — noter le rapport (succès / erreurs)
Erreurs à provoquer volontairement
Dupliquer la ligne
dev.bernard→ observer l’erreur login existantSupprimer le champ
maild’une ligne → observer la validationCorriger le CSV et ré-importer
Critère de réussite : 10 comptes importés sans erreur, convention de nommage {role}.{nom} respectée
Correspondance colonnes CSV → champs Redmine :
| Colonne CSV | Champ Redmine |
|---|---|
| login | Identifiant |
| firstname | Prénom |
| lastname | Nom |
| password | Mot de passe |
Rapport d’import attendu : 10 utilisateurs importés, 0 erreur
Erreur login dupliqué : Redmine affiche Identifiant déjà pris sur la ligne en doublon — les autres lignes sont importées normalement.
Erreur mail manquant : Redmine affiche Email n'est pas valide — la ligne est ignorée.
Après correction du CSV, ré-importer uniquement la ligne corrigée pour éviter les doublons sur les autres comptes.
Vérifier via Administration → Utilisateurs : filtrer par date de création pour isoler les comptes importés.
Durée : 25 min
Menu : Administration → Champs personnalisés
Créer les 3 champs suivants :
| Champ | Type | Trackers | Valeurs / Options |
|---|---|---|---|
| Environnement | Liste | Anomalie, Demande de service | Développement, Recette, Pré-production, Production |
| Référence client | Texte | Anomalie, Évolution, Demande de service | Longueur max : 20 caractères |
| Criticité métier | Booléen | Anomalie | Coché = impact métier confirmé |
Configuration détaillée
Environnement
Requis : oui
Valeur par défaut : Développement
Visible par : tous les rôles
Référence client
Requis : non
Expression régulière de validation :
^[A-Z]{2}-[0-9]{4,6}$(format attendu :TK-001234)Visible par : Chef de projet, Client uniquement
Criticité métier
Requis : non
Visible par : tous les rôles
Utilisé comme filtre : oui
Vérification
Créer une demande de type Anomalie → vérifier la présence des 3 champs
Créer une demande de type Tâche interne → vérifier l’absence des champs non applicables
Saisir
ABCdans Référence client → observer le message d’erreur de validationFiltrer la liste des demandes par
Criticité métier = oui
Critère de réussite : 3 champs actifs, validation regex fonctionnelle, filtre opérationnel sur Criticité métier
Menu : Administration → Champs personnalisés → Nouveau champ → sélectionner “Demandes”
Environnement
Format : Liste
Valeurs possibles : saisir chaque valeur sur une ligne séparée (Développement, Recette, Pré-production, Production)
Cocher les trackers : Anomalie, Demande de service
Requis : oui — Valeur par défaut : Développement
Référence client
Format : Texte
Longueur max : 20
Expression régulière :
^[A-Z]{2}-[0-9]{4,6}$Cocher les trackers : Anomalie, Évolution, Demande de service
Visibilité : restreindre aux rôles Chef de projet et Client
Criticité métier
Format : Booléen
Cocher le tracker : Anomalie uniquement
Cocher Utilisé comme filtre
Message d’erreur attendu pour ABC dans Référence client :
Référence client n'est pas valide
Utilisation du filtre : dans la liste des demandes → Ajouter un filtre → Criticité métier → Oui
Livrable M1 — Vérification croisée¶
Durée : 20 min
Chaque stagiaire joue le rôle d’un auditeur et vérifie l’instance d’un autre à l’aide de la check-list :
4 trackers présents et bien nommés
Workflow Anomalie / Développeur fonctionnel
Workflow étendu aux 3 rôles et 4 trackers (EX-08-ADV)
3 rôles avec permissions distinctes
3 comptes actifs + 10 comptes importés via CSV (EX-10-ADV)
5 activités de temps configurées
3 champs personnalisés actifs (EX-11-ADV)
Résultat attendu : check-list complète à vert — instance prête pour M2 et M3
⚠️ EX-01 non compressible — prévoir 45 min de buffer si WSL2 nécessite un redémarrage Windows ou une mise à jour du kernel Linux.