👌 Bonnes pratiques | Git | Quel flux de dĂ©veloppement git choisir?

Super intéressant, merci à toi.

Pour ma part on est soit sur git flow ou alors un mode un peu a l’arrache avec une seule branche master :stuck_out_tongue:

+1 pour du contenu là-dessus c’est top :slight_smile:

1 « J'aime »

Super intéressant comme sujet et merci.

Je suis du mĂȘme avis que toi concernant Gitflow, l’utilisation de deux branches perpĂ©tuelles n’a pas vraiment de sens.

Par contre j’ai aussi du mal avec le gitlab flow basĂ© sur les environnements principalement pour deux raisons :

  • Il y a des risques que les changements ne soient pas portĂ©s Ă  l’ensemble des branches (environnements).
  • On se retrouve Ă  dĂ©ployer des artefacts diffĂ©rents d’une environnement Ă  l’autre pour une mĂȘme version du code (mĂȘme ensemble de fonctionnalitĂ©s).

Personnellement, je préfÚre bosser avec GitLab flow basé sur les release branches.

D’ailleurs, comment gĂ©rez-vous les workflows basĂ©s sur des dĂ©ploiements de containers ?

1 « J'aime »

Salut Super article.

Je connaissait gitflow et on l’a utilisĂ© un moment mais nous avons arrĂȘtĂ© de l’utiliser pour un systĂšme qui lui ressemble mais un peu modifiĂ© Ă  ma sauce.

Du coup moi je fais un peu un mix (avec Master / Development / Nouvelle branche) :

  • Je crĂ©e une branche depuis Development pour ma nouvelle feature
  • DĂšs que c’est bon je merge cette nouvelle branche dans DEV et j’ajoute un tag.
    Ce tag lance gitlab-CI pour crĂ©er une image docker qui utilise la version du tag et la pousse sur l’environnement de DEV automatiquement.
  • Si tout est ok sur DEV, je merge DEV sur master et l’image prĂ©cĂ©demment crĂ©Ă©e pour DEV et rĂ©-utilisĂ©e sur l’environnement de PROD (le manifest k8s du git de production est changĂ© pour la nouvelle version de l’image), via une action manuelle pour Ă©viter le dĂ©ploiement automatique en cas d’erreur.

Important :

  • La nouvelle branche merge sur DEV permet de lire facilement le code ajoutĂ© plus tard ou de faire une review.
  • Le tag sur dev permet de liĂ© fortement une version d’une image docker avec le code source (pour un retour sur cette version si besoin).
  • L’image de dev doit ĂȘtre la mĂȘme que celle utilisĂ©e sur master afin d’ĂȘtre certain que cette image fonctionne parfaitement. De plus la branche Master (que je vais surement maintenant nommĂ©e Main) doit toujours etre le reflet de ma production afin de faire un quick fix si besoin.
  • Avant entre DEV et PROD on utilisait un environnement QA pour qu’une ou deux personnes test la chose, mais ça c’est malheureusement perdu
 domage je trouvais que c’était une bonne chose !

Voila ;p

Merci encore et bonne journée à tous.

1 « J'aime »

D’ailleurs, comment gĂ©rez-vous les workflows basĂ©s sur des dĂ©ploiements de containers ?

Personnellement je reste simple. J’ai travaillĂ© sur des projets avec des gestions d’arbres Git complexe, j’ai toujours trouvĂ© que le gain ne valait pas la complexitĂ© apportĂ©e.

OĂč je suis, chaque commit sur une branche construit une image Docker du projet. Cette image peut ĂȘtre dĂ©ployĂ©e sur un environnement de dev si besoin pour faire des tests.

Une fois merge sur master, la CI crée automatiquement un tag et incrémente la version du projet. Cette release est ensuite déployée sur les différents environnements (preprod, prod
) par les développeurs.

On est donc pas sur du dĂ©ploiement continu, c’est au dev de faire l’action de dĂ©ployer. Mais on commence Ă  passer nos apps sur ArgoCD (on a notre propre outil interne de gĂ©nĂ©ration de manifests Kubernetes et de gestion de version des applications par environnement qu’on a intĂ©grĂ© avec ArgoCD car personne aimait Kustomize), mais notre façon de gĂ©rer les dĂ©pĂŽts Git ne devrait pas changer.

Hors conteneurs (applis packagĂ©s dans des .deb par exemple) c’est un peu pareil. La CI pousse un paquet dans un dĂ©pĂŽt “test” qui peut ĂȘtre installĂ© sur un ou des serveurs pour tests. Une fois merge sur master, un paquet est construit est poussĂ© dans un repo “staging” et dĂ©ployĂ© sur les environnements du style preprod. Pour dĂ©ployer en prod, on n’a qu’à promote le paquet de staging dans le dĂ©pĂŽt de prod.

1 « J'aime »

On fait presque la mĂȘme chose Ă  la diffĂ©rence qu’on ne merge pas directement les features branches dans la branche master, on passe prĂ©fĂ©rablement par une release branche.

Sinon au niveau des dĂ©ploiements en prod, c’est pareil que vous, c’est une Ă©tape Ă  dĂ©clenchement manuelle, car gĂ©nĂ©ralement les dev doivent avoir le “go” du PO.

Pour Kustomize, on a regardé mais pas utilisé non plus. Helm semble suffir à nos besoins.

1 « J'aime »

J’ai une prĂ©fĂ©rence pour gitlab flow (que j’utilise depuis 3 ans sans savoir que ça avait un nom). Ça permet que tout soit contrĂŽlĂ© par des merges request trĂšs facilement. Depuis que je l’ai mis en place, on n’a quasiment plus d’erreurs en prĂ©-production, la gestion des rollbacks est beaucoup plus simple (mais du coup, on n’a plus vraiment Ă  en faire dans cette configuration) et tout le monde voit d’un seul coup d’Ɠil ou en est chaque environnement.

1 « J'aime »

C’est un des gros avantage que je vois dans le GitLab flow.
Mais d’un autre cĂŽtĂ© le livrable est diffĂ©rent hors j’ai pour habitude de m’assurĂ© que le livrable es identique dans les environnement, cela rĂ©duit les erreurs de dĂ©ploiement de production.
C’est pour moi le gros point noir qui fait que je ne suis pas passĂ© au GitLab flow.

Cette vidéo fait bien réagir, que ce soit ici, sur YouTube ou sur les slacks ou je suis.
Cela veux dire que ce genre de contenu vous plais.
Je vais rĂ©flĂ©chir Ă  d’autres bonnes pratiques DevOps Ă  mettre en place pour en faire des vidĂ©os.

1 « J'aime »

Argh
 je ne suis vraiment pas fan des vidĂ©os (et de youtube), mais le sujet m’intĂ©resse beaucoup et comme la vidĂ©o de @cchaudier sur les groupes/sous-groupes GitLab m’a Ă©tĂ© profitable, je vais faire l’effort d’aller la voir.

En attendant, ayant bossĂ© seul pour mes dĂ©buts et ayant Ă©tĂ© pas mal effrayĂ© par les articles traitant d’artillerie vraisemblablement trop lourde pour mes besoins, j’ai construit mon propre flow en me fixant des rĂšgles de base que je faisais Ă©voluer (si besoin). Au bout de 7 mois, je l’ai prĂ©sentĂ© dans un meetup AFPy Lyon avec pas mal de retours positifs : mais les Pytholyonnistes sont bienveillant :hugs:.
L’arrivĂ© de mon 1er collĂšgue (mai 2020) m’a motivĂ© pour le documenter clairement. Je viens de publier publiquement mon embryon de manuel de travail, mes conventions git sont la partie principale de ce projet.

Au final je dirais que le meilleur flow est celui qui Ă  Ă©tĂ© construit par l’équipe qui l’utilise, pas celui que l’on Ă  vu ailleurs et que l’on essaye de (faire) suivre.

Qui à dit «DevOps» là bas dans le fond ? :wink:

4 « J'aime »

Pour ma part, j’utilise le mĂȘme workflow a un dĂ©tail prĂšs: les merges sont interdit, tout le code qui va partir sur les branches principale doit ĂȘtre d’abord rebasĂ© sur la branche principale de dev par le dĂ©veloppeur. Ca permet:

  • C’est le dĂ©veloppeur qui s’occupe du rebase (mĂȘme complexitĂ© qu’un merge), et c’est le mieux placĂ© pour faire ça.

  • Ca permet d’avoir un historique de commit linĂ©aire qui permet d’utiliser “git bisect” pour rĂ©pondre a la question: depuis quel commit le bug est-il apparu. (note: je l’utilise plus sur les projets C que sur les projets PHP).

1 « J'aime »

J’avais Ă©crit un article pour prĂ©senter la base de mon workflow que j’adapte en fonction du projet, de si on fait de la CI uniquement ou si on veut aussi du CD, et des sensibilitĂ©s de l’équipe (me but Ă©tant que tout le monde soit en phase avec la maniĂšre de travailler) : https://gastaud.io/article/git-workflow/

Il n’y a pas de rĂ©volutions dedans. Plus un mĂ©lange des diffĂ©rentes approches :slight_smile:

Si vous avez des questions, n’hĂ©sitez pas !

Il faudrait que je montre le flux complet que j’utilise. Mais ça risque de faire une vidĂ©o de plus de 30 min. Cela pourrait-ĂȘtre l’objet d’une petite formation.
Je présente une version simplifié ici : https://www.youtube.com/watch?v=RqPxcBVGDoU

Personnelement je n’aime pas la solution qui permet Ă  un humain de pousser sur la branche principale. Car du coup il peu casser quelque chose. À partir du moment ou tu peu mettre des commit sur master qui ne sont pas passĂ©s par une CI ça peu nous arriver.

Par contre on fait toujours des rebases avant de faire une revue de code. Pour ĂȘtre sur que le code est Ă  niveau. De toute façon GitLab nous le dit quand c’est pas le cas.

Les seules merge que l’on fait sont ceux de gitlab apres la revue.

L’historique n’est pas trop mauvais en utilisant cette mĂ©thode : https://gitlab.com/lydra/shellfactory/-/network/master

Han
 il me tarde de pouvoir essayer git bisect, mais je dois avoir de trop bonnes pratiques pour ne pas encore en avoir besoin :innocent:

J’ai du utiliser ca une seule fois avec du PHP, en revanche avec du code C sur des projets complexe, je m’en sert dĂšs que le bug est dur Ă  trouver. C’est vraiment top comme fonctionnalitĂ©: on indique un commit qui fonctionne, un commit qui ne fonctionne pas, et “git bissect” va dĂ©marrer une recherche dichotomique. A chaque Ă©tape il demande au dĂ©veloppeur si le commit est bugguĂ© ou non. A la fin, il dĂ©duit quel est le premier commit Ă  prĂ©senter le bug. Ca permet de trouver le commit qui amĂšne le bug, et donc de comprendre l’état d’esprit du dĂ©veloppeur et de savoir ce qu’il voulait faire lorsqu’il a codĂ© le bug. Cela permet donc de le corriger efficacement ou de savoir Ă  qui s’adresser.

En revanche, cela demande deux conditions qui ne sont pas simple a réunir:

  • Une branche de commits linĂ©aire (pas de merge, ou du moins pas sur la section a tester)
  • Chaque commit doit ĂȘtre fonctionnel, sinon on ne peut pas le tester (enfin, on peut tolĂ©rer quelque commits non fonctionnels, mais il faut s’adapter)

C’est utile en C pour les bug de type dĂ©bordement de mĂ©moire, ou un fonctionnalitĂ© ajoutĂ©e met la pagaille dans la mĂ©moire, et dĂ©clenche un plantage ailleurs dans le code.

J’essaie de me documenter rĂ©guliĂšrement sur ce sujet afin de rester Ă  jour et dĂ©couvrir de nouvelles pratiques, c’est ainsi que je suis tombĂ© par hasard sur cet article et cela ressemble fortement Ă  l’approche que j’ai adoptĂ©.

1 « J'aime »

Je continue ma dĂ©couvert de IFTTD et je tombe sur l’épisode avec Dimitri Baeli qui aborde le continuous merge :

Sa proposition de continuous merge me parle vraiment.

Les merges m’ont longtemps fait peur, j’ai «rĂ©glé» le soucis avec un outil de merge graphique : mais plus le temps passe, moins ça me convient. je me suis dĂ©jĂ  plusieurs fois surpris a annuler un merge «simple» pour rectifier la branche Ă  la place et les merges «complexes» me donnent toujours l’impression de «refaire» voir carrĂ©ment de «casser» le boulot pour le «faire rentrer».
Bref, j’ai parcouru rapidement la doc de git octopus mais elle me semble moins accessible que ces quelques minutes de prĂ©sentation dans le podcast.

Si quelqu’un Ă  d’autres ressources ou de l’expĂ©rience Ă  me proposer sur ce sujet je suis preneur.

Je dois pas ĂȘtre frais ce matin, j’ai regardĂ© la doc de git-octopus mais je n’ai pas compris en quoi cela diffĂšre des workflows ordinaires.

Tu as souvent des soucis de merge ? Quel stack technique ?

J’avais Ă©coutĂ© cet Ă©pisode de IFTTD mais je n’avais pas Ă©tĂ© convaincu par ce workflow.

Au final c’est du githubflow mais ou on a remplacĂ© la feature-branch par une dev-branch.
Je suis pas super embalĂ© car si un dev bloque sur une fonctionnalitĂ© la branche ne peu pas ĂȘtre reprise par un autre dev, ce qui peu l’ĂȘtre dans le githubflow.

Je prefĂšre largement le githubflow gĂ©rĂ© avec GitLab comme je l’ai montrĂ© dans cette vidĂ©o.

Je laisse toujours GitLab mergĂ©, ce qui me permet d’interdire Ă  tout le monde de pousser sur master et seul les personnes avec le role maintainer peuvent merger.

Je n’ai pas compris non plus l’interet de git-octopus.

Nous avons peu de conflicts de fussion mais c’est aussi par ce que je demande Ă  toute mon Ă©quipe de faire un rebase depuis master avant de proposer sa fonctionalitĂ© Ă  la revue.

Oups, en fait le message que j’avais mis ici est bien mieux placĂ© lĂ  :

1 « J'aime »

Un message a été fusionné à un sujet existant : :man_teacher: TUTO | GitLab | Comment ranger ses dépÎts GitLab?

Pour complément sur ce sujet, Martin Fowler a écrit un article trÚs complet : https://martinfowler.com/articles/branching-patterns.html

1 « J'aime »