Aller au contenu principal
Bonnes pratiques Git · 02

Branches
& workflow

Des branches longues protégées, des branches de travail courtes, et un seul chemin pour aller jusqu’à la production : la merge request.

Principe

Chaque modification part d’une branche courte, est relue dans une merge request, puis progresse d’environnement en environnement par fusion, jamais par copie de fichiers.

Deux types de dépôts​

Dépôt applicatifDépôt GitOps
Exemplescma-backend, cma-front, sgs-vitrineagitex-bf-apps
ContenuCode source, tests, .gitlab-ci.ymlCharts Helm, manifests Kustomize, application.yaml ArgoCD
RôleCI : build, tests, publication de l’imageCD : décrit l’état désiré, ArgoCD l’applique
Branches longuesdevelop, recette, mainmain, recette, preprod, prod

Dépôt applicatif​

Branches longues​

BrancheRôleProtection
developIntégration continue du travail de l’équipeProtégée, fusion par MR
recetteVersion en validation fonctionnelleProtégée, fusion par MR depuis develop
mainVersion livrable. Chaque push déclenche la CI, qui publie l’image et met à jour le dépôt GitOpsProtégée, fusion par MR depuis recette
feature/CMA-142-export ──┐
fix/CMA-150-arrondi ─────┼──► develop ──MR──► recette ──MR──► main ──► CI : image + tag GitOps
chore/maj-spring-boot ───┘

Branches courtes​

PréfixeUsagePart deRevient dans
feature/Nouvelle fonctionnalitédevelopdevelop
fix/Correction d’un défaut en cours de développementdevelopdevelop
hotfix/Correction urgente d’un défaut en productiontag de production ou mainmain, puis reportée dans recette et develop
chore/Maintenance : dépendances, outillage, CIdevelopdevelop
docs/Documentation seuledevelopdevelop

Nommer une branche​

Format : <type>/<ticket>-<description-courte>, en minuscules et en kebab-case, sans accents ni espaces.

feature/CMA-142-export-ordonnances
fix/SGS-88-calcul-moyenne-trimestre
hotfix/CMA-231-calcul-tva
chore/maj-angular-20

Le numéro de ticket relie la branche, ses commits et sa merge request au besoin d’origine.

Règles des branches de travail​

  • Partir du dernier état de develop : plus une branche démarre tard, moins elle produit de conflits.

    git fetch origin
    git switch -c feature/CMA-142-export-ordonnances origin/develop
  • Un seul sujet par branche. Un correctif découvert en chemin mérite sa propre branche.

  • Courte durée de vie : quelques jours. Au-delà, découpez le sujet ou intégrez-le par étapes.

  • Se mettre à jour régulièrement, au moins une fois par jour, avec git rebase origin/develop (voir Éviter les conflits).

  • Supprimer la branche après la fusion : cochez « Supprimer la branche source » dans la merge request, puis nettoyez en local.

    git switch develop && git pull
    git branch -d feature/CMA-142-export-ordonnances

Dépôt GitOps​

Le dépôt GitOps suit un modèle différent : une branche par environnement, et ArgoCD déploie automatiquement ce qui est poussé sur chacune.

BrancheRôle
mainIntégration : nouvelles applications, charts, application.yaml. Aucune Application ArgoCD ne la suit
recetteÉtat désiré de l’environnement de recette
preprodÉtat désiré de la préproduction
prodÉtat désiré de la production

Les règles à retenir :

  • Déployer = committer sur la branche de l’environnement. Personne ne fait de kubectl apply ou de helm upgrade à la main : selfHeal annulerait la modification.

  • Promouvoir = fusionner la branche source dans la branche cible, de préférence par merge request :

    git switch preprod
    git merge recette
    git push
  • Revenir en arrière = git revert du commit fautif sur la branche de l’environnement, puis push.

  • Les commits de la CI (cma backend recette -> 1a2b3c4 [ci skip]) mettent à jour les tags d’image. On ne les modifie pas à la main et on ne réécrit jamais l’historique de ces branches.

  • Aucun secret dans ce dépôt : ils sont provisionnés directement dans le cluster.

Protéger les branches dans GitLab​

Dans Paramètres › Dépôt › Branches protégées :

BrancheAutorisé à pousserAutorisé à fusionnerForce push
develop, recette, main (applicatif)PersonneMainteneursInterdit
preprod, prod (GitOps)Compte de service CI uniquementMainteneurs, avec approbationInterdit
recette (GitOps)Mainteneurs et compte de service CIMainteneursInterdit

Dans Paramètres › Merge requests, activez aussi :

  • Les pipelines doivent réussir ;
  • Tous les fils de discussion doivent être résolus ;
  • Supprimer la branche source coché par défaut ;
  • la méthode de fusion Merge commit with semi-linear history.

:::warning Pouvoir fusionner sur prod, c’est pouvoir déployer en production Limitez le rôle Maintainer du dépôt GitOps aux personnes habilitées à livrer en production. :::