TFS2010 Team build - как развернуть базы данных перед запуском юнит-тестов - PullRequest
1 голос
/ 20 июня 2011

Я следовал Как подготовить базу данных для пошагового руководства по развертыванию 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>

Ответы [ 2 ]

0 голосов
/ 21 июня 2011

Это именно то, что мне было нужно. Пожалуйста, смотрите здесь PNG, который отображает все следующие пункты:

  1. Сначала я организовал набор аргументов в своем шаблоне процесса сборки, где я установил целевой хост базы данных, пользователя и пароль. (См. Раздел «Аргумент»)
  2. На случай, если текущим модульным тестам проекта требуется работающая БД, я установил в «Элементы для сборки» 2 разных проекта:
    • В первом слоте * .dbproj
    • Во втором самом SLN
  3. Теперь в шаблоне процесса сборки я расширил «Запуск MSBuild для проекта» как последовательность (см. «Последовательность»), гарантируя, что аргументы MSBuild отличаются в левом случае:

Аргументы для MSBuild с левой стороны («Запустить 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 = "Имя ПК, на котором должна быть развернута база данных" *
- DBUsername = "Имя пользователя базы данных"
- DBPassword = "Пароль базы данных"
- DBName = "Имя префикса базы данных" (я согласен с текущим именем сборки)

Аргументы для MSBuild с правой стороны («Запустить MSBuid для SLN / Project»):

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

Обратите внимание, что если я развернул БД с левой стороны, я также установлю DBHasBeenSet в TRUE, что также вызовет некоторую обработку файлов внутри "Адаптации в исходных файлах". К ним относится перенаправление наших библиотек NUnit на вновь созданную БД. Я могу установить более подробную информацию об этом, если хотите.

0 голосов
/ 21 июня 2011

Вы можете изменить место, где это происходит в вашем развертывании.

Я бы развернул базу данных сразу после вашей основной команды сборки в рабочем процессе. В 2008 году с .proj это стало немного яснее, потому что вы просто добавили бы его к <Target Name=BeforeTest> Попробуйте переместить его на более раннюю точку процесса.

...