2011-06-20 3 views
1

j'ai suivi How to prepare database for TFS deployment walkthroughTFS2010 Team Build - comment déployer des bases de données avant l'exécution des tests unité

et mon script de compilation déploie avec succès la base de données à la fin du processus de construction. Cependant, j'ai besoin que la base de données soit déployée avant d'exécuter des tests unitaires. J'ai essayé de copier l'étape et de la coller juste au-dessus de "Obtenir les tests impactés, indexer les sources et publier les symboles". Cependant, le processus de construction renvoie l'erreur suivante:

* The deployment manifest file Database_Core.deploymanifest does not exist Here is the excerpt from my xaml file for the database deploy:

     <Sequence DisplayName="Deploy Database" sap:VirtualizedContainerService.HintSize="486,330"> 
         <sap:WorkflowViewStateService.ViewState> 
          <scg:Dictionary x:TypeArguments="x:String, x:Object"> 
          <x:Boolean x:Key="IsExpanded">True</x:Boolean> 
          <x:Boolean x:Key="IsPinned">True</x:Boolean> 
          </scg:Dictionary> 
         </sap:WorkflowViewStateService.ViewState> 
         <If Condition="[BuildDetail.CompilationStatus &lt;&gt; BuildPhaseStatus.Failed]" DisplayName="If Build Succeeded" sap:VirtualizedContainerService.HintSize="464,206"> 
          <sap:WorkflowViewStateService.ViewState> 
          <scg:Dictionary x:TypeArguments="x:String, x:Object"> 
           <x:Boolean x:Key="IsPinned">True</x:Boolean> 
          </scg:Dictionary> 
          </sap:WorkflowViewStateService.ViewState> 
          <If.Then> 
          <mtbwa:InvokeProcess Arguments="[&quot;/a:Deploy /cs:&quot;&quot;Data Source=MyServer-SQL1\BUILD;Integrated Security=True;Pooling=False&quot;&quot; /dd+ /dsp:Sql /manifest:Database_Core.deploymanifest&quot;]" DisplayName="Invoke VSDBCMD" FileName="C:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy\VSDBCMD.EXE" sap:VirtualizedContainerService.HintSize="219,100" WorkingDirectory="[BuildDetail.DropLocation]"> 
           <mtbwa:InvokeProcess.ErrorDataReceived> 
           <ActivityAction x:TypeArguments="x:String"> 
            <ActivityAction.Argument> 
            <DelegateInArgument x:TypeArguments="x:String" Name="errOutput" /> 
            </ActivityAction.Argument> 
            <mtbwa:WriteBuildError DisplayName="VSDBCMD Error" sap:VirtualizedContainerService.HintSize="200,22" Message="[errOutput]" /> 
           </ActivityAction> 
           </mtbwa:InvokeProcess.ErrorDataReceived> 
           <mtbwa:InvokeProcess.OutputDataReceived> 
           <ActivityAction x:TypeArguments="x:String"> 
            <ActivityAction.Argument> 
            <DelegateInArgument x:TypeArguments="x:String" Name="stdOutput" /> 
            </ActivityAction.Argument> 
            <mtbwa:WriteBuildMessage DisplayName="VSDBCMD Output" sap:VirtualizedContainerService.HintSize="200,22" Importance="[Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High]" Message="[stdOutput]" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces" /> 
           </ActivityAction> 
           </mtbwa:InvokeProcess.OutputDataReceived> 
           <sap:WorkflowViewStateService.ViewState> 
           <scg:Dictionary x:TypeArguments="x:String, x:Object"> 
            <x:Boolean x:Key="IsPinned">False</x:Boolean> 
           </scg:Dictionary> 
           </sap:WorkflowViewStateService.ViewState> 
          </mtbwa:InvokeProcess> 
          </If.Then> 
          <If.Else> 
          <mtbwa:WriteBuildWarning DisplayName="Deployment Skipped" sap:VirtualizedContainerService.HintSize="220,100" Message="Database deployment was skipped" /> 
          </If.Else> 
         </If> 
         </Sequence> 
+0

Vous pouvez ajuster votre configuration de construction de telle sorte que la publication de la base de données soit exécutée avant l'exécution des tests unitaires? – thekip

Répondre

0

C'est exactement ce dont j'avais besoin. S'il vous plaît voir here un PNG qui représente tous les points qui suivent:

  1. Dans un premier temps je me suis arrangé un ensemble d'arguments dans mon modèle de processus de construction, où je mis la cible hôte de base de données, l'utilisateur & le mot de passe. (Voir la section « Argument »)
  2. En cas les tests unitaires de projet en cours ont besoin d'une course DB, je les réglerai « éléments pour construire » 2 différents projets:
    • Dans la première tranche du * .dbproj
    • dans le second, le SLN se
  3. maintenant dans le modèle de processus de construction J'ai élargi la « Run MSBuild pour le projet » comme une séquence (voir « séquence »), en veillant à ce que les arguments MSBuild sont différents dans la gauche:

Arguments pour MSBuild sur le côté gauche ("Run MSBuild + Déployer DB"):

String.Format("/p:SkipInvalidConfigurations=true /t:Build;Deploy /p:TargetConnectionString=""Data Source={0}%3Buser={1}%3Bpwd={2}"" /p:DeployToDatabase=true /p:TargetDatabase={3}_{4} {5}", 
      TargetMachineToDeployDB, DBUsername, DBPassword, DBName, BuildDetail.BuildNumber.Replace(".", "_"), MSBuildArguments) 

Dans le cas où il est pas trop évident, le lien entre les arguments & les params affichés dans la définition sont:
- TargetMachineToDeployDB = "nom du PC où la base de données doit être déployée"
- dBUserName = "Base de données nom d'utilisateur"
- DBPassword = "Base de données Mot de passe"
- DBName = "nom de la base Prefix" (I concat le buildName actuel)

Arguments pour MSBuild sur le côté droit ("Run MSBuid pour SLN/Projet"):

String.Format("/p:SkipInvalidConfigurations=true {0}", MSBuildArguments) 

Notez que si je déployé un DB sur le côté gauche, je tournerai un dans DBHasBeenSet TRUE , ce qui déclenchera également la manipulation de fichiers dans "Adaptations in Source Files". Cela inclut la redirection de nos DLL NUnit vers la nouvelle DB. Je peux définir plus de détails à ce sujet, si vous voulez.

0

Vous pouvez changer l'endroit où cela se produit dans votre déploiement.

Je voudrais déployer la base de données juste après votre commande de construction principale dans le flux de travail. En 2008 avec le .proj c'est un peu plus clair parce que vous l'ajouteriez simplement à <Target Name=BeforeTest> Essayez de le déplacer plus tôt dans le processus.

Questions connexes