Comment Team Build peux vous accompagner dans la mise à jour des bases de données
Bonjour à toutes et à tous,
Team Build qui ce trouve être l'outil permettant de générer des binaires pour les projets situés sur Team Foundation Server, repose sur MS Build.
MSBuild est apparu en même temps que le Framework .net 2.0 et à permit de personnaliser des tâches de génération par des fichiers de configuration XML. Voici un exemple de fichier:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MaTâche"/>
</Project>
Un fichier MSBuild dont l'extention est .proj commence donc par une balise <Project> et ce termine par </Project>; les éléments ce trouvant entre ces deux balises permettent donc de donner (transmettre) des informations.
Comme je le disais, Team Build repose sur MSBuil et donc fonctionne de la même façon. Avec Visual Studio Team System 2008 Database Edition Power Tools il est possible de comparrer le schéma de deux bases de données ou les données de deux bases de données. Ce sont les commande :
- SqlSchemaCompareTask
- SqlDataCompareTask
Donc voici le fonctionnement pour une utilisation direct depuis MSBuild :
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--Import the settings-->
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\TeamData\Microsoft.VisualStudio.TeamSystem.Data.PowerTools.Tasks.targets"/>
<Target Name ="SchemaCompare">
<SqlSchemaCompareTask
SourceConnectionString="Data Source=(local);User Id=sa;Password=sa;Trusted_Connection=False;"
SourceDatabaseName="Test"
TargetConnectionString="Data Source=(local)\SQLEXPRESS;User Id=sa;Password=sa;Trusted_Connection=False;"
TargetDatabaseName="Test"
OutputPath = "c:\"
OutputFileName = "SchemaCompare.sql"/>
</Target>
</Project>
Il est à noté que j'utilise la version 2008 donc le fichier de target ce trouve dans (VisualSutdio\V9.0)
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--Import the settings-->
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\TeamData\Microsoft.VisualStudio.TeamSystem.Data.PowerTools.Tasks.targets"/>
<Target Name ="DataCompare">
<SqlDataCompareTask
SourceConnectionString="Data Source=(local);User Id=sa;Password=sa;Trusted_Connection=False;"
SourceDatabaseName="Test"
TargetConnectionString="Data Source=(local)\SQLEXPRESS;User Id=sa;Password=sa;Trusted_Connection=False;"
TargetDatabaseName="Test"
OutputPath = "c:\"
OutputFileName = "DataCompare.sql"/>
</Target>
</Project>
L'exécution par exemple pour MSBuild serait : MSBuild.exe MonFichier.proj /t:DataCompare
Pour permettre à Team Build de générer automatiquement ces fichiers lors des générations, il suffit de rajouter les commandes dans le fichier .proj qui est stocké dans le contrôler de codes sources au niveau de chaque projet.

Dans ce fichier il est possible de rajouter des commandes dans un ensemble de tâches Team Build. Pour cet exemple je vais rajouter ma commande SCHEAMCOMPARETASK dans la tache AFTERCOMPILE qui est la tache qui est exécuter après la compilation des fichiers de code. Il est préférable pour la lisibilité du fichier de rajouter ce code en fin de fichier juste avant la balise </PROJECT>.
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0
\TeamData\Microsoft.VisualStudio.TeamSystem.Data.PowerTools.Tasks.targets"/>
<Target Name ="AfterCompile">
<SqlSchemaCompareTask
SourceConnectionString="Data Source=(local);User Id=sa;Password=sa;Trusted_Connection=False;"
SourceDatabaseName="test"
TargetConnectionString="Data Source=(local)\SQLEXPRESS;User Id=sa;Password=sa;Trusted_Connection=False;"
TargetDatabaseName="test"
OutputPath = "$(OutDir)"
OutputFileName = "TestSchemaCompare.sql"/>
</Target>
Et voila à chaque compilation du projet le fichier contenant les script SQL de migration du schéma de la base de données sera générer et grace à la propriété partagé Team Build nommé $(OutDir) le fichier ce retrouvera au même emplacement que le MSI, DLL ou EXE.
Je vous souhaite bon BUILD ;)
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :