Developper à plusieurs ? Un jeu d’enfant !
Je vous ai précèdement expliqué un peu notre infrastructure, ça ce passait ici.
Aujourd’hui parlons un peu d’optimisation pour le travail à plusieurs. Pour gagner en efficacité, il est important de pouvoir développer sereinement sans embêter les copains. Or, nous sommes 3 (petit rappel pour les nouveaux). Voici comment notre environnement de travail est organisé:
- Un SVN:
- Une branche “trunk“, nous avons tous les trois accès à cette branche. C’est ce qu’on pourrait appeler “la branche principale du projet”. Elle sert principalement aux quick fix. Si un bug est découvert, il sera fixé directement sur cette branche.
- Chacun de nous possède sa propre branche “dev” sur le svn. C’est une “copie” de la branche “trunk” mais dans laquelle nous effectuons nos développements “long”. Par exemple je travail sur une nouvelle fonctionnalité, je vais utiliser ma branche de Dev. Ainsi Kevin ou Raf ne verrons pas mes développements dans leurs branches. Je peux avoir des fichiers de configurations différents de mes deux collègues, sans ce que cela les affecte.
- Une base MySQL dédiée. Celle ci est partagée par nous 3. De cette manière nous travaillons sur une base commune.
- Préproduction: Il n’est pas rare d’avoir des sueurs froide lors d’un commit : tout marche en local, une fois en production, c’est la cata! Pour palier à cela. Nous avons 4 préproductions surs notre serveur dédié.
- Préproduction correspondant à la branche trunk. Permet de voir le rendu du site comme s’il était en production.
- Préproduction correspondant au 3 branches de dev citées plus haut. Permet de tester ses développement et de les montrer aux collègues
Et la mise en prod dans tout ça ? J’y viens justement !
- Mise en production: J’ai confectionné un script (s’il peut en intéresser certains, qu’ils me demandent) en bash. Son rôle est de faire un “diff” entre le ftp de la production (et oui, c’est le seul accès que j’ai sur l’hébergement !), et notre branche “trunk” locale. J’entends par la qu’il va s’occuper de trouver toutes les différences entre les 2 espaces distants. Ajout, suppression, modification, gestion des droits etc. Une fois ses différences détectées, il ne reste plus qu’a rendre la production identique à la préprod. Ce script a deux fonctionnalités:
- Simulation de mise en production: Le script se comporte comme s’il effectuait la mise en production, tout les opérations sont loggués dans des fichiers textes, mais aucune n’est réellement effectuée. Cela permet tout simplement de voir ce qu’il va se passer lors de la mise en prod. Un rapide coup d’oeil sur ces fichiers pour savoir si tout va bien dérouler.
- Mise en production. Étape identique à celle du dessus sauf que les opérations sont réalisés cette fois ci. Un backup de tous les fichiers modifié ou supprimé sur la prod est effectué à chaque mise en production. Pourquoi ? En cas de gros problème il m’est possible de revenir en arrière très rapidement.
Petite astuce supplémentaire. Nous pouvons passer depuis notre interface de backend le site en maintenance! Vous autres aurez droit à une belle page de maintenance. Pour nous 3, nous verrons le site comme d’habitude. Très pratique je vous assure.
Dernier point avant de clore cet article. Qui fait quoi dans tout ça? Pour éviter les problèmes, nous procédons de la manière suivante:
- Lorsqu’un développement est terminé sur notre branche de dev. Cette branche est “mixée” (merge), avec la branche “trunk” pour ensuite la mettre en production. Cette étape est exclusivement faite par Kevin et tout le monde est prévenu.
- Lors d’une mise en production, c’est moi qui m’en charge.
Mais Raf alors ? Bah Raf il compte les points… Plus sérieusement, il s’occupe d’autres trucs que Kevin et moi ne touchons pas ;).
Oui mais s’il arrive un problème sur maTiTine et que celui qui s’en occupe est en vacances !?
Nous avons un forum interne ou nous postons, entre autre, les informations sur comment marche quoi, toutes les informations techniques etc. Ça peut toujours servir un jour ou l’autre
J’espère que cet article servira à une dream team qui veut se lancer mais qui ne sait pas trop comment s’organiser pour développer !