Personnalisation de déploiements de base de données pour plusieurs environnements
par Jason Lee
Cette rubrique explique comment adapter les propriétés d’une base de données à des environnements cibles spécifiques dans le cadre du processus de déploiement.
Notes
La rubrique suppose que vous déployez un projet de base de données Visual Studio 2010 à l’aide de MSBuild.exe et de VSDBCMD.exe. Pour plus d’informations sur les raisons pour lesquelles vous pouvez choisir cette approche, consultez Déploiement web dans l’entreprise et Déploiement de projets de base de données.
Lorsque vous déployez un projet de base de données sur plusieurs destinations, vous souhaitez souvent personnaliser les propriétés de déploiement de base de données pour chaque environnement cible. Par exemple, dans les environnements de test, vous recréez généralement la base de données à chaque déploiement, tandis que dans les environnements intermédiaires ou de production, vous êtes beaucoup plus susceptible d’effectuer des mises à jour incrémentielles pour conserver vos données.
Dans un projet de base de données Visual Studio 2010, les paramètres de déploiement sont contenus dans un fichier de configuration de déploiement (.sqldeployment). Cette rubrique vous montre comment créer des fichiers de configuration de déploiement spécifiques à l’environnement et spécifier celui que vous souhaitez utiliser comme paramètre VSDBCMD.
Cette rubrique fait partie d’une série de tutoriels basés sur les exigences de déploiement d’entreprise d’une société fictive nommée Fabrikam, Inc. Cette série de tutoriels utilise un exemple de solution, la solution Gestionnaire de contacts, pour représenter une application web avec un niveau de complexité réaliste, notamment une application ASP.NET MVC 3, un service Windows Communication Foundation (WCF) et un projet de base de données.
La méthode de déploiement au cœur de ces didacticiels est basée sur l’approche de fichier projet fractionné décrite dans Présentation du fichier projet, dans laquelle le processus de génération est contrôlé par deux fichiers projet : l’un contenant des instructions de génération qui s’appliquent à chaque environnement de destination et l’autre contenant des paramètres de build et de déploiement spécifiques à l’environnement. Au moment de la génération, le fichier projet spécifique à l’environnement est fusionné dans le fichier projet indépendant de l’environnement pour former un ensemble complet d’instructions de génération.
Vue d’ensemble de la tâche
Cette rubrique suppose que :
- Vous utilisez l’approche de fichier projet fractionné pour le déploiement de la solution, comme décrit dans Présentation du fichier projet.
- Vous appelez VSDBCMD à partir du fichier projet pour déployer votre projet de base de données, comme décrit dans Présentation du processus de génération.
Pour créer un système de déploiement qui prend en charge la variation des propriétés de déploiement de base de données entre les environnements cibles, vous devez :
- Créez un fichier de configuration de déploiement (.sqldeployment) pour chaque environnement cible.
- Créez une commande VSDBCMD qui spécifie le fichier de configuration de déploiement en tant que commutateur de ligne de commande.
- Paramétrez la commande VSDBCMD dans un fichier projet Microsoft Build Engine (MSBuild), afin que les options VSDBCMD soient appropriées à l’environnement cible.
Cette rubrique vous montre comment effectuer chacune de ces procédures.
Création de fichiers de configuration de déploiement Environment-Specific
Par défaut, un projet de base de données contient un fichier de configuration de déploiement unique nommé Database.sqldeployment. Si vous ouvrez ce fichier dans Visual Studio 2010, vous pouvez voir les différentes options de déploiement disponibles :
- Classement de comparaison de déploiement. Cela vous permet de choisir d’utiliser le classement de base de données de votre projet (le classement source ) ou le classement de base de données de votre serveur de destination (classement cible ). Dans la plupart des cas, vous souhaiterez utiliser le classement source lorsque vous effectuez un déploiement dans un environnement de développement ou de test. Lorsque vous effectuez un déploiement dans un environnement de préproduction ou de production, vous souhaitez généralement laisser le classement cible inchangé pour éviter tout problème d’interopérabilité.
- Déployer des propriétés de base de données. Cela vous permet d’appliquer ou non les propriétés de la base de données, comme défini dans le fichier Database.sqlsettings . Lorsque vous déployez une base de données pour la première fois, vous devez déployer les propriétés de la base de données. Si vous mettez à jour une base de données existante, les propriétés doivent déjà être en place et vous n’avez pas besoin de les déployer à nouveau.
- Recréez toujours la base de données. Cela vous permet de choisir de recréer la base de données cible chaque fois que vous déployez ou d’apporter des modifications incrémentielles pour mettre la base de données cible à jour avec votre schéma. Si vous recréez la base de données, vous perdrez toutes les données de la base de données existante. Par conséquent, vous devez généralement définir cette valeur sur false pour les déploiements dans des environnements intermédiaires ou de production.
- Bloquer le déploiement incrémentiel en cas de perte de données. Cela vous permet de choisir si le déploiement doit s’arrêter si une modification du schéma de base de données entraîne la perte de données. Vous définissez généralement cette valeur sur true pour un déploiement dans un environnement de production, afin de vous donner la possibilité d’intervenir et de protéger toutes les données importantes. Si vous avez défini Toujours recréer la base de données sur false, ce paramètre n’aura aucun effet.
- Exécutez le déploiement en mode mono-utilisateur. Il ne s’agit généralement pas d’un problème dans les environnements de développement ou de test. Toutefois, vous devez généralement définir cette valeur sur true pour les déploiements dans des environnements intermédiaires ou de production. Cela empêche les utilisateurs d’apporter des modifications à la base de données pendant le déploiement.
- Sauvegardez la base de données avant le déploiement. Vous définissez généralement cette valeur sur true lorsque vous effectuez un déploiement dans un environnement de production, par précaution contre la perte de données. Vous pouvez également la définir sur true lorsque vous effectuez un déploiement dans un environnement intermédiaire, si votre base de données intermédiaire contient beaucoup de données.
- Générez des instructions DROP pour les objets qui se trouvent dans la base de données cible, mais qui ne sont pas dans le projet de base de données. Dans la plupart des cas, il s’agit d’une partie intégrante et essentielle des modifications incrémentielles apportées à une base de données. Si vous avez défini Toujours recréer la base de données sur false, ce paramètre n’aura aucun effet.
- N’utilisez pas d’instructions ALTER ASSEMBLY pour mettre à jour les types CLR. Ce paramètre détermine comment SQL Server devez mettre à jour les types CLR (Common Language Runtime) vers des versions d’assembly plus récentes. Cette valeur doit être définie sur false dans la plupart des scénarios.
Ce tableau présente les paramètres de déploiement classiques pour différents environnements de destination. Toutefois, vos paramètres peuvent être différents en fonction de vos besoins exacts.
Développeur/Test | Préproduction/intégration | Production | |
---|---|---|---|
Classement de comparaison de déploiement | Source | Cible | Cible |
Déployer les propriétés de la base de données | True | Première fois uniquement | Première fois uniquement |
Toujours recréer la base de données | True | False | False |
Bloquer le déploiement incrémentiel si une perte de données peut se produire | False | Peut-être | True |
Exécuter un script de déploiement en mode mono-utilisateur | False | True | True |
Sauvegarder la base de données avant le déploiement | False | Peut-être | True |
Générer des instructions DROP pour les objets qui se trouvent dans la base de données cible, mais qui ne sont pas dans le projet de base de données | False | True | True |
Ne pas utiliser d'instructions ALTER ASSEMBLY pour mettre à jour les types CLR | False | False | False |
Notes
Pour plus d’informations sur les propriétés de déploiement de base de données et les considérations relatives à l’environnement, consultez Vue d’ensemble des paramètres de projet de base de données, Guide pratique pour configurer des propriétés pour les détails du déploiement, Générer et déployer une base de données dans un environnement de développement isolé et Générer et déployer des bases de données dans un environnement intermédiaire ou de production.
Pour prendre en charge le déploiement d’un projet de base de données vers plusieurs destinations, vous devez créer un fichier de configuration de déploiement pour chaque environnement cible.
Pour créer un fichier de configuration spécifique à l’environnement
Dans Visual Studio 2010, dans la fenêtre Explorateur de solutions, cliquez avec le bouton droit sur votre projet de base de données, puis cliquez sur Propriétés.
Dans la page propriétés du projet de base de données, sous l’onglet Déployer , dans la ligne Fichier de configuration du déploiement , cliquez sur Nouveau.
Dans la boîte de dialogue Nouveau fichier de configuration de déploiement , attribuez un nom explicite au fichier (par exemple, TestEnvironment.sqldeployment), puis cliquez sur Enregistrer.
Dans la page [Filename].sqldeployment , définissez les propriétés de déploiement pour qu’elles correspondent aux exigences de votre environnement de destination, puis enregistrez le fichier.
Notez que le nouveau fichier est ajouté au dossier Propriétés dans votre projet de base de données.
Spécification du fichier de configuration de déploiement dans VSDBCMD
Lorsque vous utilisez des configurations de solution (telles que Debug et Release) dans Visual Studio 2010, vous pouvez associer un fichier de configuration de déploiement à chaque configuration. Lorsque vous générez une configuration particulière, le processus de génération génère un fichier manifeste de déploiement spécifique à la configuration qui pointe vers le fichier de configuration de déploiement spécifique à la configuration. Toutefois, l’un des objectifs les main de l’approche de déploiement décrite dans ces tutoriels est de permettre aux utilisateurs de contrôler le processus de déploiement sans utiliser Visual Studio 2010 et les configurations de solution. Dans cette approche, la configuration de la solution est la même, quel que soit l’environnement de déploiement cible. Pour adapter votre déploiement de base de données à un environnement de destination spécifique, vous pouvez utiliser les options de ligne de commande VSDBCMD pour spécifier votre fichier de configuration de déploiement.
Pour spécifier un fichier de configuration de déploiement dans votre VSDBCMD, utilisez le commutateur p:/DeploymentConfigurationFile et fournissez le chemin d’accès complet à votre fichier. Cela remplace le fichier de configuration de déploiement que le manifeste de déploiement identifie. Par exemple, vous pouvez utiliser cette commande VSDBCMD pour déployer la base de données ContactManager dans un environnement de test :
vsdbcmd.exe /a:Deploy
/manifest:"…\ContactManager.Database.deploymanifest"
/cs:"Data Source=TESTDB1;Integrated Security=true"
/p:TargetDatabase=ContactManager
/p:DeploymentConfigurationFile=
"…\ContactManager.Database_TestEnvironment.sqldeployment"
/dd+
/script:"…\Publish-ContactManager-Db.sql"
Notes
Notez que le processus de génération peut renommer votre fichier .sqldeployment lorsqu’il copie le fichier dans le répertoire de sortie.
Si vous utilisez des variables de commande SQL dans vos scripts SQL de prédéploiement ou de post-déploiement, vous pouvez utiliser une approche similaire pour associer un fichier .sqlcmdvars spécifique à l’environnement à votre déploiement. Dans ce cas, vous utilisez le commutateur p:/SqlCommandVariablesFile pour identifier votre fichier .sqlcmdvars.
Exécution de la commande VSDBCMD à partir d’un fichier projet MSBuild
Vous pouvez appeler une commande VSDBCMD à partir d’un fichier projet MSBuild à l’aide d’une tâche Exec au sein d’une cible MSBuild. Dans sa forme la plus simple, il se présente comme suit :
<Target Name="DeployDatabase">
<PropertyGroup>
<_Cmd>
Add your VSDBCMD command here
</_Cmd>
</PropertyGroup>
<Exec Command="$(_Cmd)"/>
</Target>
- Dans la pratique, pour faciliter la lecture et la réutilisation de vos fichiers projet, vous devez créer des propriétés pour stocker les différents paramètres de ligne de commande. Cela permet aux utilisateurs de fournir plus facilement des valeurs de propriété dans un fichier projet spécifique à l’environnement ou de remplacer les valeurs par défaut à partir de la ligne de commande MSBuild. Si vous utilisez l’approche de fichier projet fractionné décrite dans Présentation du fichier projet, vous devez diviser vos instructions et propriétés de build entre les deux fichiers en conséquence :
- Les paramètres spécifiques à l’environnement, tels que le nom de fichier de configuration de déploiement, la chaîne de connexion à la base de données et le nom de la base de données cible, doivent se trouver dans le fichier projet spécifique à l’environnement.
- La cible MSBuild qui exécute la commande VSDBCMD, ainsi que toutes les propriétés universelles telles que l’emplacement de l’exécutable VSDBCMD, doit aller dans le fichier projet universel.
Vous devez également vous assurer de générer le projet de base de données avant d’appeler VSDBCMD afin que le fichier .deploymanifest soit créé et prêt à être utilisé. Vous pouvez voir un exemple complet de cette approche dans la rubrique Comprendre le processus de génération, qui vous guide à travers les fichiers projet dans l’exemple de solution Contact Manager.
Conclusion
Cette rubrique décrit comment adapter les propriétés de base de données à différents environnements de destination lorsque vous déployez des projets de base de données à l’aide de MSBuild et VSDBCMD. Cette approche est utile lorsque vous devez déployer des projets de base de données dans le cadre de solutions plus grandes à l’échelle de l’entreprise. Ces solutions sont souvent déployées sur plusieurs destinations, telles que des environnements de développement ou de test en bac à sable( sandbox), des plateformes intermédiaires ou d’intégration, ainsi que des environnements de production ou en direct. Chacun de ces environnements cibles nécessite généralement un ensemble unique de propriétés de déploiement de base de données.
En savoir plus
Pour plus d’informations sur le déploiement de projets de base de données à l’aide de VSDBCMD.exe, consultez Déploiement de projets de base de données. Pour plus d’informations sur l’utilisation de fichiers projet MSBuild personnalisés pour contrôler le processus de déploiement, consultez Présentation du fichier projet et Présentation du processus de génération.
Ces articles sur MSDN fournissent des conseils plus généraux sur le déploiement de bases de données :
- Vue d’ensemble des paramètres de projet de base de données
- Procédure : configurer des propriétés pour les détails du déploiement
- Créer et déployer des bases de données dans un environnement de développement isolé
- Créer et déployer des bases de données dans un environnement intermédiaire ou de production