Contexte
Je travaille sur la création d'un nouveau processus de développement pour une petite équipe Web d'environ 4 programmeurs et 4 concepteurs, avec le potentiel évident de développer l'équipe à l'avenir. Notre produit est une application centrale qui alimente les sites Web des clients que nous concevons et hébergeons également.
Auparavant, nous travaillions tous via FTP sur un serveur de développement, avec une seule base de données de développement. Cela a "fonctionné" * pendant un certain temps, mais nous allons dans une nouvelle direction, il est donc temps de mûrir notre processus.
Nous utilisons Percona Server 5.5, mais cela devrait être indépendant de la base de données, avec l'idée de maintenir les coûts bas.
Objectifs :
Je cherche à créer un processus d'intégration continue (CI) pour le développement de bases de données en gardant à l'esprit les points suivants:
- Les développeurs ont une copie locale des données pour exécuter le code de développement
- Capable de restaurer la structure de la base de données dans un ensemble de modifications précédent
- Capable de séparer les modifications de schéma de nouvelles fonctionnalités des modifications de correctif de conception de schéma
- Capable de modifier la structure de la base de données localement pour les tests
Concept initial
J'ai esquissé un processus ci-dessous en utilisant SVN et LiquiBase, bien qu'il supprime complètement #4
.
- créer une branche «développement» à partir du tronc
- le serveur de base de données «développement» central s'écoule de la branche «développement»
- les développeurs locaux sont configurés comme esclaves de la branche de développement (fournit
#1
ci-dessus)- les modifications de liquibase sont régulièrement validées dans la branche de développement, qui exécute un hook post-commit pour mettre à jour la base de données de développement centrale (qui se répercutera sur les machines locales fonctionnant en tant qu'esclaves de ce serveur de développement) (liquibase fournit
#2
ci-dessus)- lorsque les fonctionnalités ou les correctifs de schéma sont prêts à passer à QA, DBA (moi) fusionnera les modifications appropriées de la branche de développement dans le tronc. Cette action créera un script sql à appliquer à un serveur de base de données intermédiaire.
- Le serveur de transfert doit refléter TRUNK, qui doit avoir la même structure que Production, plus les modifications qui sont en QA
- après avoir exécuté le script sql sur le serveur intermédiaire, effectuez un contrôle qualité sur les modifications.
- Si tout semble bien, TAG la structure. Cela générera le script .sql à exécuter manuellement en production par le DBA (pour les heures creuses si nécessaire)
Ce processus nécessite que tous les développeurs utilisent la même branche de «développement», ce qui signifie qu'il n'y a qu'une seule version du schéma de base de données à un moment donné (je ne suis pas sûr que je le veuille).
Cela signifie également que toute modification du schéma ne peut pas être testée localement et pourrait affecter d'autres développeurs si elle n'est pas bien faite. Dans notre environnement, les développeurs peuvent ajouter de nouvelles tables mais rarement modifier la structure existante. En tant que DBA, les correctifs de conception sont effectués par moi. Mais l'incapacité de tester les correctifs localement est mon plus gros blocage du processus.
Comment le processus ci-dessus peut-il être modifié pour permettre le développement local, tout en conservant une copie des données relativement à jour (telle que fournie par la réplication dans le processus que je propose)? Je n'ai pas besoin que les données soient à jour jusqu'à la dernière semaine.
* Par «travaillé», je veux dire que cela suffisait mais c'était un PITA.
la source