---
title: Flux complet
description: Relier le développement, la CI, le registry, le serveur et le rollback.
---
Voici le parcours complet d'un changement jusqu'à la production.
### Développer un petit changement
Une branche courte part de `main`. Les hooks locaux donnent un premier retour sans remplacer la CI.
### Ouvrir une pull request
Le frontend et le backend sont vérifiés en parallèle : lint, tests et build.
### Valider l'image
La CI construit les Dockerfiles de production et peut lancer les tests d'intégration contre la stack Compose.
### Fusionner sur une branche saine
La fusion n'est possible que si les contrôles obligatoires et la revue ont réussi.
### Créer une version
Un tag SemVer, par exemple `v1.4.0`, déclenche la publication d'une image portant le même tag.
### Publier dans le registry
La CI s'authentifie avec un jeton à portée limitée, pousse l'image et conserve son digest.
### Déployer sur le serveur
L'environnement `production` libère ses secrets après les protections éventuelles. Une clé SSH dédiée appelle le script de déploiement.
### Vérifier ou restaurer
Healthchecks, URL publique, journaux et smoke test confirment la version. En cas d'échec, le tag précédent est redéployé.
## Vue d'ensemble
```text
branche courte
│
▼
pull request ──► CI ──► revue ──► main
│
▼
tag de version
│
build + push de l'image
│
▼
registry
│
approbation éventuelle
│
▼
serveur ──► healthcheck
│
si échec
▼
tag précédent
```
## Critères de passage
| Passage | Condition |
| --- | --- |
| pull request → main | tous les contrôles et la revue réussissent |
| main → version | la branche est livrable et le changelog est prêt |
| version → registry | l'image est construite et identifiée sans ambiguïté |
| registry → production | sauvegarde, accès, secrets et approbations sont prêts |
| déploiement → terminé | healthchecks et smoke test réussissent |
## En cas d'incident
1. arrête les déploiements concurrents ;
2. collecte le tag, l'heure, les journaux et les changements de configuration ;
3. redéploie le dernier tag sain si l'incident vient de l'application ;
4. restaure les données seulement si nécessaire et selon la procédure testée ;
5. corrige par un nouveau changement versionné, sans modifier le conteneur à la main ;
6. documente la cause et améliore le contrôle qui aurait pu la détecter.
La pipeline n'est complète que lorsqu'elle sait prouver quelle version tourne, détecter un échec et revenir à un état connu.