Bonjour à tous,
Ca fait plusieurs semaines que ce problème me trotte dans la tête et maintenant plusieurs jours que je m'acharne a essayer de trouver une solution.
Je suis en train de passer nos développeurs sur Git pour que tout le monde travaille uniquement sur une version de développement de nos applications web. Grosso modo, c'est du 85/15 (85% backoffice, outil métier etc et 15% de frontoffice) utilisant plusieurs bases de données (toutes sous mysql 5).
Auparavant, c'était un peu "a l'ancienne". Chacun bossait "en live" sur le FTP avec Dreamweaver et resynchronisait sa copie locale pour éviter d'écraser les corrections faites par un autre ... Concernant la base de données, ça a toujours été le point central que tout le monde "peut toucher" et dans certains cas ça peut être du haut vol ... (genre on change la clé primaire d'une table, faut que tous les fichiers .php contenant des requetes sql vers cette table soit ouverts et corrigés et on fait un gros "crtl+s" d'un coup sur tous les fichiers pour éviter que ça plante ...)
Bref, c'était la préhistoire et je voudrai les tourner vers un environnement de ce genre :
- développement sur sa copie locale
- versionning avec git
- développement uniquement sur les branches de développement
- merge des branches puis push sur serveur de test/dev
- si tous les tests sont bon, on push sur le serveur de prod
- rollback si un problème en prod
Tout ce qui est "fichiers", c'est parfait. J'en suis encore au bon vieux "git diff" + ftp pour la partie mise en production mais avec notre nouveau serveur de prod, tout sera fait directement via git.
Mon problème c'est les bases de données (enfin, une en particuliers, les autres étant plus pour de cas précis).
Je voudrai savoir comment je pourrai faire pour que chacun puisse travailler "dans son coin", qu'il puisse modifier les schémas de la bdd (ajout de table, ajout de champs, renommage de champ etc.) sans que ça vienne impacter les autres développeurs.
J'ai bien pensé à un système conjugant un serveur de bases de données uniquement destiné au développement et une synchronisation avec les bases de données de production mais cette solution ne me convient pas car, par exemple :
- l'action de renommage d'une table par un développeur cassera la version que les autres ont
- obligation d'une connexion internet juste pour ça (donc soumis aux aléas de bande passante ...)
- impossible de tester des évolutions de bases de données sans que ça ne dérange les autres développeurs
Je cherche désespérément a faire un système de versionning de bdd avec par exemple, un répertoire "up" et un autre "down" contenant chacun les corrections a faire pour la version en cours ... c'est là que ça bloque.
J'ai pensé aussi à faire un simple dump de la structure des tables et de le placer dans notre répo git. Git nous indiquera les modifications sur le schémas mais on ne sera pas capable de savoir si on a modifié un champs existant (et donc conservé les données) ou supprimé un champ et ajouté un autre a sa place (et donc perte des données) ...
Bref, vous l'aurez compris, je m'arrache les cheveux sur ce problème. Que me conseillerez-vous pour gérer les évolutions de nos bdd ?
Merci à tous ceux qui répondront
Partager