1

我遵循了如何为 TFS 部署准备数据库演练

并且我的构建脚本在构建过程结束时成功部署了数据库。但是,我需要在运行单元测试之前部署数据库。我尝试复制该步骤并将其粘贴到“获取受影响的测试、索引源和发布符号”的正上方。但是,构建过程返回以下错误:

*部署清单文件 Database_Core.deploymanifest 不存在这是我的数据库部署的 xaml 文件的摘录:

                        <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>
4

2 回答 2

0

您可以更改部署中发生这种情况的位置。

我会在工作流中的主要构建命令之后立即部署数据库。在 2008 年的 .proj 中,这一点更加清晰,因为您只需将其添加到<Target Name=BeforeTest>Try move it to a early point in the process。

于 2011-06-20T20:14:51.260 回答
0

这也正是我所需要的。请在此处查看描述以下所有要点的 PNG:

  1. 起初,我在构建过程模板中安排了一组参数,在其中设置了目标数据库主机、用户和密码。(见“论据”部分)
  2. 如果当前项目的单元测试需要一个正在运行的数据库,我在“要构建的项目”中设置了 2 个不同的项目:
    • 在第一个插槽中 *.dbproj
    • 在第二个 SLN 本身
  3. 现在在构建过程模板中,我将“为项目运行 MSBuild”扩展为序列(请参阅“序列”),确保左侧情况下的 MSBuild 参数不同:

左侧 MSBuild 的参数(“Run MSBuild + Deploy 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)

如果不太明显,参数和定义中显示的参数之间的连接是:
- TargetMachineToDeployDB = “将部署数据库的 PC 名称”
- DBUsername = “数据库用户名”
- DBPassword = “数据库密码”
- DBName = “数据库前缀名称”(我连接当前的构建名称)

右侧 MSBuild 的参数(“Run MSBuid for SLN/Project”):

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

请注意,如果我在左侧部署了一个 DB,我还将一个DBHasBeenSet设置为 TRUE,这还将触发“源文件中的改编”中的一些文件处理。其中包括将我们的 NUnit DLL 重定向到新构建的数据库。如果你愿意,我可以设置更多细节。

于 2011-06-21T11:38:32.313 回答