J'ai eu un moment difficile essayer de trouver de bons exemples de la façon de gérer la base de données des schémas et des données entre le développement, les tests et les serveurs de production.
Voici notre programme d'installation. Chaque développeur dispose d'une machine virtuelle à l'exécution de notre application et de la base de données MySQL. Il leur bac à sable pour faire ce qu'ils veulent. Actuellement, les développeurs vont faire un changement dans le schéma SQL et faire un dump de la base de données vers un fichier texte qu'ils s'engagent dans le SVN.
Nous sommes désireux de déployer une intégration continue serveur de développement qui sera toujours la dernière commis code. Si nous le faisons maintenant, il va recharger la base de données à partir de SVN pour chaque construction.
Nous avons un test de serveur (virtuel) qui s'occupe de "la libération des candidats". Déploiement sur le serveur de test est actuellement un processus très manuel, et implique généralement me le chargement de la dernière version de SQL à partir de SVN et le tordre. En outre, les données sur le serveur de test est incohérent. Vous vous retrouvez avec ce que des données de test de la dernière développeur de commettre avait sur son bac à sable serveur.
Où tout se casse est le déploiement à la production. Puisque nous ne pouvons pas remplacer le live de données avec des données de test, cela implique manuellement re-création de toutes les modifications de schéma. Si il y avait un grand nombre de modifications de schéma ou de la conversion des scripts pour manipuler les données, cela peut faire très poilue.
Si le problème était juste le schéma, Il serait plus facile de problème, mais il est "base de données" dans la base de données est mise à jour au cours du développement, tels que les méta-données des autorisations de sécurité et les tables.
C'est le plus grand obstacle que je vois dans la voie de l'intégration continue et en une seule étape-construit. Comment pensez - vous résoudre?
Une question: comment vous faites le suivi des versions de base de données de sorte que vous savez quels scripts à exécuter pour mettre à niveau une instance de base de données? Est une version de table comme la Lance mentionne ci-dessous la procédure standard?
Merci pour la référence à Tarantino. Je ne suis pas dans une .NET de l'environnement, mais j'ai trouvé leurs DataBaseChangeMangement page wiki pour être très utile. Surtout, cette Présentation Powerpoint (.ppt)
Je vais écrire un script Python qui vérifie les noms de *.sql
scripts dans un répertoire donné contre une table dans la base de données et exécute ceux qui ne sont pas dans l'ordre selon un entier qui forme la première partie du nom de fichier. Si c'est une jolie solution simple, comme je pense qu'elle sera, alors, je vais le poster ici.
J'ai un travail de script pour cette. Il gère l'initialisation de la DB si il n'existe pas et l'exécution de scripts de mise à niveau si nécessaire. Il y a aussi des commutateurs pour nettoyer une base de données existante et de l'importation des données de test à partir d'un fichier. Il est environ 200 lignes, de sorte que je ne poste pas (bien que je pourrais le mettre sur pastebin si il y a un intérêt).