Stratégies de Gestion Monorepo | GitScrum
Gérez les monorepos efficacement avec structure, outils et pratiques appropriés. GitScrum supporte builds incrémentaux et coordination multi-packages.
5 min de lecture
Les monorepos hébergent plusieurs projets dans un seul dépôt. Bien fait, ils simplifient le partage et la cohérence. Mal fait, ils deviennent lents, confus et difficiles à maintenir. Ce guide couvre les approches pratiques de gestion de monorepo.
Compromis du Monorepo
| Avantage | Défi |
|---|---|
| Partage de code | Complexité de build |
| Changements atomiques | Temps CI |
| Cohérence | Gestion des permissions |
| Visibilité | Outillage requis |
Structure du Dépôt
Organiser le Monorepo
STRUCTURE MONOREPO
══════════════════
STRUCTURE TYPIQUE:
─────────────────────────────────────
monorepo/
├── apps/ # Applications
│ ├── web/ # Frontend web
│ ├── api/ # API Backend
│ ├── mobile/ # App mobile
│ └── admin/ # Dashboard admin
├── packages/ # Bibliothèques partagées
│ ├── ui/ # Composants UI
│ ├── utils/ # Utilitaires
│ ├── config/ # Config partagée
│ └── types/ # Définitions de types
├── tools/ # Outils de build
│ └── scripts/
├── package.json # Package racine
├── nx.json / turbo.json # Config outil monorepo
└── README.md
CONVENTIONS DE NOMMAGE:
─────────────────────────────────────
Packages:
├── @org/web (apps)
├── @org/api (apps)
├── @org/ui (packages)
├── @org/utils (packages)
├── Nommage scopé
└── Propriété claire
OWNERSHIP:
─────────────────────────────────────
Définir les propriétaires:
├── apps/web → Équipe Web
├── apps/api → Équipe Backend
├── packages/ui → Équipe Design Systems
├── packages/utils → Équipe Platform
├── Fichier CODEOWNERS
└── Responsabilité claire
Gestion des Dépendances
Dépendances Internes
GESTION DES DÉPENDANCES
═══════════════════════
DÉPENDANCES INTERNES:
─────────────────────────────────────
apps/web/package.json:
{
"dependencies": {
"@org/ui": "workspace:*",
"@org/utils": "workspace:*"
}
}
Utilisant protocole workspace:
├── Lie au package local
├── Pas de gestion de version
├── Utilise toujours l'actuel
├── Mises à jour atomiques
└── Deps internes simples
GRAPHE DE DÉPENDANCES:
─────────────────────────────────────
┌─────────┐
│ apps │
└────┬────┘
│ dépend de
┌────▼────┐
│packages │
└────┬────┘
│ peut dépendre de
┌────▼────┐
│packages │
└─────────┘
Règles:
├── Apps dépendent des packages
├── Packages peuvent dépendre des packages
├── Pas de dépendances circulaires
├── Packages ne dépendent pas des apps
└── Hiérarchie claire
DÉPENDANCES EXTERNES:
─────────────────────────────────────
Stratégies:
├── Remonter à la racine (même version)
├── Ou permettre versions par package
├── Cohérence préférée
├── Cadence de mise à jour régulière
└── Santé des dépendances
Système de Build
Builds Efficaces
SYSTÈME DE BUILD
════════════════
BUILDS INCRÉMENTAUX:
─────────────────────────────────────
Construire seulement ce qui a changé:
├── Détecter packages affectés
├── Construire seulement ceux-ci + dépendants
├── Mettre en cache les résultats
├── Réutiliser l'inchangé
└── Feedback rapide
EXEMPLE (Nx):
─────────────────────────────────────
# Build seulement affectés
nx affected:build
# Test seulement affectés
nx affected:test
# Lint seulement affectés
nx affected:lint
CACHE DISTANT:
─────────────────────────────────────
├── Cache partagé entre CI et local
├── Évite de rebuilder ce qui est caché
├── Accélération dramatique
├── Nx Cloud, Turborepo Remote Cache
└── Essentiel à l'échelle
Configuration CI
CI POUR MONOREPO:
┌─────────────────────────────────────────────────────────────┐
│ │
│ STRATÉGIE CI: │
│ │
│ 1. DÉTECTION DES CHANGEMENTS │
│ ├── Identifier packages modifiés │
│ ├── Inclure dépendants │
│ └── Ignorer non affectés │
│ │
│ 2. BUILD PARALLÈLE │
│ ├── Packages indépendants en parallèle │
│ ├── Respecter graphe de dépendances │
│ └── Maximiser parallélisation │
│ │
│ 3. CACHE │
│ ├── Cache des dépendances (node_modules) │
│ ├── Cache des builds (dist) │
│ └── Cache distant entre runs │
│ │
│ 4. VALIDATION │
│ ├── Lint packages affectés │
│ ├── Test packages affectés │
│ ├── Build packages affectés │
│ └── Déployer si applicable │
│ │
└─────────────────────────────────────────────────────────────┘
Dashboard Monorepo
┌────────────────────────────────────────────────────────────────┐
│ MONOREPO - Dashboard │
├────────────────────────────────────────────────────────────────┤
│ │
│ PACKAGES: │
│ ├── apps/web [████████████░░░░░░░░] 12 tâches │
│ ├── apps/api [██████████████░░░░░░] 15 tâches │
│ ├── packages/ui [████████░░░░░░░░░░░░] 8 tâches │
│ └── packages/utils [████░░░░░░░░░░░░░░░░] 4 tâches │
│ │
│ SANTÉ BUILD: │
│ ├── Temps CI moyen: 8 min (↓ vs 15 min avant cache) │
│ ├── Cache hit rate: 78% │
│ └── Builds affectés/total: 3/10 (70% économisé) │
│ │
│ DÉPENDANCES: │
│ ├── Externes à jour: 92% │
│ └── Alertes sécurité: 2 (à traiter) │
│ │
└────────────────────────────────────────────────────────────────┘
Intégration GitScrum
GitScrum supporte les monorepos avec:
- Labels package: Filtrage par package
- Ownership code: Mapping équipes-packages
- Tâches cross-packages: Changements atomiques
- Releases coordonnées: Versions multi-packages
- Rapports par package: Métriques granulaires