Dans cette article je pars du principe que tu connais les commandes git ainsi que le vocabulaire tel que Pull Request / Merge Request. Si ce n’est pas le cas n’hĂ©site pas Ă lire l’article dĂ©diĂ© aux bases de git avant celui ci.
Ici tu vas apprendre comment organiser tes branches pour bien gĂ©rer le cycle de vie de tes projets. On va commencer par les bases avec seulement les branches basiques pour arriver jusqu’Ă la structure la plus complexe que tu peux trouver dans une entreprise. A toi d’estimer jusqu’oĂč aller selon ton projet.
La base
Commence par créer 2 branches :
- main : c’est le code qui tourne en production
- develop : c’est le code qui est en cours de dĂ©veloppement
A partir de develop quand tu veux ajouter une fonctionnalité, tu vas préfixer ta branche par feature/ puis mettre le nom de ta fonctionnalité.
- exemple : feature/add-title-to-welcome-page, feature/add-article-to-welcome-page
Pour chacune de ces branches quand tu as terminé (donc réalisé ton/tes commits), tu peux les merger dans develop via une PR / MR.
DĂšs que develop a assez avancĂ© pour ĂȘtre considĂ©rĂ©e comme une nouvelle release, merge develop vers main
Cela implique en gĂ©nĂ©ral une mise en production du code de la branche main. C’est souvent automatisĂ© via un Continuous Delivery, on en parle dans l’article dĂ©diĂ© Ă la CI / CD.
Ca c’est le minimum vital, maintenant comment faire si tu te rends compte qu’en production il y a des bugs ?
Hotfix
Dans ce cas tu vas tirer une branche de main que tu préfixes par hotfix/
- exemple : hotfix/correct-link-welcome-icon, hotfix/popup-doesn-t-close
DÚs que tu as terminé ta correction tu merges sur main ET sur develop
Selon ton cycle de vie de projet tu peux aussi estimer ne faire aucune correction et donc tes bugs seront dans la prochaine version de develop que tu mergeras sur main. Tu peux alors prefixer ces corrections dans bufix/ au lieu de feature/
– exemple : bugfix/correct-link-welcome-icon
Tu peux aussi répartir : créer des hotfix pour les bugs important et bloquant et des bugfix pour ceux qui peuvent attendre la prochaine livraison
Pour Ă©viter d’avoir trop de bug qui arrive en productions on va prĂ©fĂ©rer avoir un voir plusieurs environnements intermĂ©diaires.
Environnements
Entre develop et main, il est courant d’avoir une ou plusieurs branches intermĂ©diaires qui sont dĂ©diĂ©es Ă ĂȘtre testĂ©es dans un autre environnement que le developpement avant mise en production. On peut trouver :
– staging : intĂ©gration technique avant de passer Ă la validation mĂ©tier.
– qual
/ qa
/ uat
: validation mĂ©tier : les Ă©quipes dĂ©diĂ©es vont tester nos dĂ©veloppements pour valider qu’ils correspondent aux attentes
– preprod : simulation complĂšte de la production, on reproduit lâenvironnement de production Ă lâidentique pour tester la livraison rĂ©elle.
Selon le projet tu peux avoir plus ou moins tous les Ă©tages. Par exemple il est possible de n’avoir que preprod et il regroupera les besoins des 3 Ă la fois : tests par les mĂ©tiers, la technique et sera en conditions de production.
ATTENTION HOTFIX : Avoir ces branches en plus implique que si tu fais des hotfix sur l’un des Ă©tages alors il faudra les rĂ©percuter sur les Ă©tages infĂ©rieurs. C’est pour cela que cela ajoute une certaine lourdeur Ă ton organisation git donc adaptĂ©e pour des projets consĂ©quents.
Il est donc important d’adapter le nombre d’environnement Ă la taille de ton projet. Petit projet perso, juste preprod voir aucun. Gros projet d’entreprise avec plusieurs services impliquĂ©s dans le dĂ©veloppement du logiciel…la totale !
Petits ou grands projets il est pratique de gérer des versions
Gérer les releases
PremiÚre chose, quand tu as mergé vers main, créer un tag sur main portant le semver de ta version :
git tag -a v1.2.0 -m « Release version 1.2.0 »
C’est le minimum pour gĂ©rer des versions, maintenant tu peux aller plus loin en ayant des branche dĂ©diĂ©es que tu prĂ©fixes par release/
- exemple release/v1.0.2, release/v1.0.3
Tu pourras ainsi revenir facilement Ă une ancienne version en cas de besoin. Mettons qu’il y ai le feu en production revenir Ă un tag ou bien avoir le code d’une release ancienne en production le temps de rĂ©gler les soucis est alors tout Ă fait possible
Au final
Ton organisation de branche va imbriquer plus ou moins de branches selon la taille de ton projet et tes besoins
Au minimum tu devras avoir une branche develop et main et rĂ©aliser tes devs dans develop pour les pousser vers main une fois prĂȘts.
Pour assurer le moins de bugs possibles en production, des environnements intermĂ©diaires peuvent ĂȘtre mis en place afin de tester les non rĂ©gressions, bug ou simplement que ce qui a Ă©tĂ© dĂ©veloppĂ© correspond Ă ce qui est demandĂ©
Maintenant si tu veux mettre en place un dĂ©ploiement automatique quand du code est mergĂ© dans un environnement c’est par ici (lien Continuous Developpment). Tu peux Ă©galement mettre en place une vĂ©rification automatique avant qu’un merge soit rĂ©alisĂ© vers une environnement par ici (lien Continuous IntĂ©gration).
Bon Ă savoir
Git flow a Ă©tĂ© Ă l’origine une proposition de Vincent Driessen dans son blog et devenu petit Ă petit un standard dans l’industrie du dĂ©veloppement
lien de son article : https://nvie.com/posts/a-successful-git-branching-model/
Il existe d’autre modĂšle de stratĂ©gie de branches
– https://docs.github.com/en/get-started/using-github/github-flow
Laisser un commentaire