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.

M1 — Administration Redmine

APERTO-NOTA

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


Exercice 1 - Installation Docker Desktop + Redmine

Solution to Exercise 1 #

Vérifier que les deux conteneurs sont en cours d’exécution :

docker ps

Ré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 minutes

En cas d’erreur, consulter les logs :

docker compose logs redmine
docker compose logs db

Erreurs fréquentes :

  • Port 3000 déjà utilisé → modifier "3000:3000" en "3001:3000" dans le docker-compose.yml

  • WSL2 non activé → Panneau de configuration → Activer les fonctionnalités Windows → Sous-système Windows pour Linux


Exercice 2 - Paramétrage général de l’instance

Solution to Exercise 2 #

Onglet Général

ChampValeur
Titre de l’applicationRedmine - Dupont (exemple)
Formatage du texteCommonMark Markdown (GitHub Flavored)
Nom d’hôte et cheminlocalhost:3000
ProtocoleHTTP

Onglet Affichage

ChampValeur
Langue par défautFrançais
Forcer la langue pour les utilisateurs identifiéscoché
Format de dateBasé sur la langue de l’utilisateur
Format d’heureBasé sur la langue de l’utilisateur
Format des temps en heures0:45 h

Onglet Authentification

ChampValeur
Authentification obligatoireNon, autoriser l’accès anonyme aux projets publics
Inscription des nouveaux utilisateursactivation manuelle du compte
Longueur minimum des mots de passe8
Double authentificationoptionnel

Onglet API

ChampValeur
Activer l’API RESTcoché
Activer le support JSONPnon coché

Vérification fonctionnelle : une fois la clé API générée (Mon compte → Clé d’accès API → Réinitialiser), tester depuis PowerShell :

curl -H "X-Redmine-API-Key: VOTRE_CLE_API" http://localhost:3000/projects.json

Résultats attendus :

  • {"projects":[...]} → API active et clé valide

  • {"errors":["Accès non autorisé"]} → API active, clé incorrecte

  • Page HTML (formulaire de login) → API non activée

Onglet Projets

ChampValeur
Définir les nouveaux projets comme publics par défautdécoché
Modules activés par défautSuivi des demandes, Suivi du temps passé, Wiki, Publication de documents, Publication de fichiers
Trackers par défautà configurer après l’exercice 4
Rôle donné à un utilisateur non-administrateur qui crée un projetChef 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

ChampValeur
Autoriser les relations entre demandes de différents projetscoché
Fermer les doublons automatiquementcoché
Jours non travailléssamedi, dimanche
Attributs des tâches parentesCalculé à partir des sous-tâches (début, échéance, priorité, % réalisé)

Onglet Suivi du temps

ChampValeur
Champs obligatoires pour les temps passésDemande cochée
Maximum d’heures par jour999 (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.


Exercice 3 - Définition des statuts et workflow

Solution to Exercise 3 #

Statuts : Administration → Statuts des demandes

Redmine 5.1 pré-installe “Nouvelle demande” et “Nouveau”. Contrôler la liste existante, puis créer les statuts manquants :

  • En cours

  • En attente client

  • Commentaire

  • Résolu

  • Fermé (cocher Statut fermé)

  • Rejeté (cocher Statut fermé)

Workflow : Administration → Workflow → sélectionner Tracker = Anomalie, Rôle = Développeur → Modifier

Matrice à reproduire :

NouveauEn coursEn attente clientRésoluCommentaireFerméRejeté
Nouvelle demande
Nouveau
En cours
En attente client
Résolu
Commentaire
Fermé
Rejeté

Sauvegarder, puis vérifier en se connectant avec dev.martin et en changeant le statut d’une demande.


Exercice 4 - Création des trackers

Solution to Exercise 4 #

Menu : Administration → Trackers → Nouveau tracker

Capture d'écran des trackers

Figure 1:Liste des tracker définis

Détail d'un tracker

Figure 2:Detail d’un tracker

L’ordre d’affichage se règle avec les flèches haut/bas dans la liste des trackers après création.

Étape complémentaire — retour dans Administration → Configuration → onglet Projets

Maintenant que les trackers existent, définir les trackers activés par défaut pour les nouveaux projets :

  • Cocher : Anomalie

  • Cocher : Évolution

  • Laisser décochés : Demande de service, Tâche interne

Sauvegarder.


Exercice 5 - Création des rôles et permissions

Solution to Exercise 5 #

Menu : Administration → Rôles et permissions → Nouveau rôle

Chef de projet

Configuration générale :

  • Demandes assignables : coché

  • Visibilité des demandes : Toutes les demandes non privées

  • Visibilité du temps passé : Tous les temps passés

  • Visibilité des utilisateurs : Tous les utilisateurs actifs

Permissions — décocher tout, puis cocher uniquement :

SectionPermissions
ProjetGérer les membres, Gérer les versions, Sauvegarder les requêtes
Suivi des demandesVoir, Créer, Ajouter des notes, Gérer les catégories de demandes
Suivi du temps passéVoir le temps passé, Saisir le temps passé
WikiVoir le wiki, Modifier les pages, Voir l’historique des modifications, Supprimer les pages
ForumsVoir les messages, Poster un message
DocumentsVoir les documents
FichiersVoir les fichiers
GanttVoir le gantt
CalendrierVoir le calendrier

Développeur

Configuration générale :

  • Demandes assignables : coché

  • Visibilité des demandes : Toutes les demandes non privées

  • Visibilité du temps passé : Tous les temps passés

  • Visibilité des utilisateurs : Tous les utilisateurs actifs

Permissions — décocher tout, puis cocher uniquement :

SectionPermissions
ProjetGérer les versions, Sauvegarder les requêtes
Suivi des demandesVoir, Créer, Modifier les demandes, Gérer les relations, Gérer les sous-tâches, Ajouter des notes, Voir les notes privées, Rendre les notes privées, Gérer les catégories de demandes
Suivi du temps passéVoir le temps passé, Saisir le temps passé
Dépôt de sourcesVoir les révisions, Parcourir les sources, Droit de commit, Gérer les demandes associées
WikiVoir le wiki, Modifier les pages, Voir l’historique des modifications, Supprimer les pages
FichiersVoir les fichiers, Gérer les fichiers
ForumsVoir les messages, Poster un message, Modifier ses propres messages
DocumentsVoir les documents
GanttVoir le gantt
CalendrierVoir le calendrier

Client

Configuration générale :

  • Demandes assignables : décoché

  • Visibilité des demandes : Demandes créées par cet utilisateur

  • Visibilité du temps passé : Aucun

  • Visibilité des utilisateurs : Membres du projet

Permissions — décocher tout, puis cocher uniquement :

SectionPermissions
Suivi des demandesVoir, Créer, Ajouter des notes
WikiVoir le wiki
DocumentsVoir les documents
FichiersVoir les fichiers

Restriction par tracker — section “Suivi des demandes” en bas du formulaire

Cette section apparaît après les permissions générales. Elle affine les droits par tracker. Conserver la ligne Tous les trackers pour les 3 rôles — ne pas cocher les lignes individuelles (Anomalie, Évolution, Assistance) qui héritent automatiquement.

Chef de projet :

TrackerVoirCréerModifierAjouter des notes
Tous les trackers

Développeur :

TrackerVoirCréerModifierAjouter des notes
Tous les trackers

Client :

TrackerVoirCréerModifierAjouter des notes
Tous les trackers

Exercice 6 - Création des comptes utilisateurs

Solution to Exercise 6 #

Menu : Administration → Utilisateurs → Nouveau utilisateur

Pour chaque compte :

  1. Renseigner Login, Prénom, Nom, Email (fictif)

  2. Définir un mot de passe temporaire (ex : Formation2026!)

  3. Cocher Doit changer son mot de passe à la prochaine connexion

  4. Statut : Actif

  5. Sauvegarder

Vérifier dans Administration → Utilisateurs que les 3 comptes apparaissent avec le statut “Actif”.


Exercice 7 - Configuration des activités de suivi des temps

Solution to Exercise 7 #

Menu : Administration → Listes de valeurs → Activités (suivi du temps)Nouvelle valeur

Pour chaque activité : saisir le nom, laisser “Actif” coché, laisser “Valeur par défaut” décoché.

Création d'une activité

Figure 3:Création d’une activité

Définir “Développement” comme activité par défaut : cocher Valeur par défaut uniquement sur cette entrée.

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


Exercice 8 - Workflow multi-rôles et multi-trackers

Solution to Exercise 8 #

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 — une seule case à cocher :

Fermé
Résolu

Demande de service / Client — même matrice qu’Évolution / Client :

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. Par exemple, copier Anomalie / Chef de projet vers Évolution / Chef de projet, puis Demande de service / Chef de projet, puis Tâche interne / Chef de projet.

Vérification rapide sans changer de session : Administration → Workflow → sélectionner le tracker et le rôle → Consulter (mode lecture seule).


Exercice 9 - API REST : interrogation et manipulation via curl

Solution to Exercise 9 #

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ée

  • 422 Unprocessable Entity → champ obligatoire manquant (vérifier tracker_id, subject)

  • 404 Not Foundproject_id ou issue id incorrect

Récupérer les tracker_id de votre instance :

curl -H "X-Redmine-API-Key: VOTRE_CLE_API" `
     http://localhost:3000/trackers.json

Exercice 10 - Import CSV d’utilisateurs en masse

Solution to Exercise 10 #

Correspondance colonnes CSV → champs Redmine :

Colonne CSVChamp Redmine
loginIdentifiant
firstnamePrénom
lastnameNom
mailEmail
passwordMot 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.

Vérifier via Administration → Utilisateurs : filtrer par date de création pour isoler les comptes importés.


Exercice 11 - Champs personnalisés (Custom Fields)

Solution to Exercise 11 #

Menu : Administration → Champs personnalisés → Nouveau champ → sélectionner “Demandes”

Environnement

  • Format : Liste

  • Valeurs possibles : saisir chaque valeur sur une ligne séparée

  • 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


Exercice 12 - Export Redmine vers Excel via n8n

Solution to Exercise 12 #

Nœud 2 — GET Projets

  • Type : HTTP Request

  • URL : http://redmine:3000/projects.json

  • Authentication : Header Auth

  • Header name : X-Redmine-API-Key

  • Header value : clé API admin

  • Réponse : JSON → $.projects contient le tableau

Nœud 3 — GET Trackers

  • Identique, URL : http://redmine:3000/trackers.json

  • Réponse : JSON → $.trackers

Nœud 4 — Code (JavaScript)

const projects = $('GET Projets').all().map(i => i.json.projects).flat();
const trackers = $('GET Trackers').all().map(i => i.json.trackers).flat();

const projectRows = projects.map(p => ({
  id: p.id,
  identifier: p.identifier,
  name: p.name,
  description: p.description || '',
  created_on: p.created_on
}));

const trackerRows = trackers.map(t => ({
  id: t.id,
  name: t.name
}));

return [{ json: { projects: projectRows, trackers: trackerRows } }];

Nœud 5 — Lire fichier (Read/Write Files from Disk)

  • Opération : Read File(s) From Disk

  • Chemin : /data/redmine-export.xlsx

  • Le fichier est transmis en binaire au nœud suivant

Nœud 6 — Mettre à jour Excel (Spreadsheet File)

  • Opération : Update

  • File format : XLSX

  • Sheet name : Projets (premier passage), puis dupliquer le nœud pour Trackers

  • Input data : relier la sortie du nœud Code

Nœud 7 — Écrire fichier (Read/Write Files from Disk)

  • Opération : Write File to Disk

  • Chemin : /data/redmine-export.xlsx

  • Le fichier écrasé est immédiatement visible sur le disque hôte dans C:\redmine-formation\

URL de téléchargement : après exécution, vérifier directement le fichier sur le disque hôte — inutile de télécharger depuis n8n.


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 :

Résultat attendu : check-list complète à vert — instance prête pour M2 et M3