Как выполнить операцию копирования MSBuild только на компьютере сборки? - PullRequest
0 голосов
/ 29 июня 2010

Я хочу выполнить некоторые действия копирования на машине сборки (но не на машинах разработчика)

  • после сборка выполняется и
  • до запускаются интеграционные тесты.

Как мне это сделать?

Возможно, мне следует разбить вопрос на подвопросы и привести несколько примеров.

Вопрос 1 : Что мне нужно сделать, чтобы скрипт MSBuild обнаружил, что он выполняется на компьютере сборки и, следовательно, выполняет операцию копирования? Адаптировать ли я файл * .csproj? Я делаю что-нибудь в файле определения сборки? Сервер сборки является частью нашего бэкэнда TFS 2010.

Вопрос 2 : Какую переменную мне нужно использовать для ссылки на папку сборки на машине сборки? Абсолютный путь

C:\Builds\1\ProjectX\Continous Integration\

Мне нужно скопировать некоторые файлы, которые находятся под контролем версий и попали в папку Sources в папку Binaries.

C:\Builds\1\ProjectX\Continous Integration\Binaries
C:\Builds\1\ProjectX\Continous Integration\Sources
C:\Builds\1\ProjectX\Continous Integration\TestResults

Ответы [ 4 ]

1 голос
/ 29 июня 2010

Независимо от того, с чем вы автоматизируете сборку, должна быть возможность передать свойство в MSBuild. В командной строке вы делаете что-то вроде:

msbuild my.proj /p:RunningOnBuildMachine=true

В вашем сценарии вы можете использовать условие на основе $(RunningOnBuildMachine) == 'true' для запуска промежуточного шага. В качестве альтернативы уже существует встроенная переменная $ (BuildingInsideVisualStudio), которая сообщает MSBuild, вызывается ли она из VS или нет, что может быть достаточно для ваших нужд.

Что касается вашего выходного каталога, это немного сложнее. Что определяет это местоположение? Это CI сервер? Если это так, вы можете попытаться заставить это передать каталог вывода в качестве свойства и сценарию.

0 голосов
/ 30 января 2013

Если вы чувствуете себя комфортно с рабочими процессами, вы можете манипулировать существующим, чтобы сделать это, как уже указал Эд. Если вы хотите, чтобы это было частью вашего процесса сборки, чтобы вы могли подготовить пакет, который в конечном итоге вы сможете использовать с msdeploy, вы можете вставить его в скрипт msbuild.

1) Предполагая, что у вас есть файл веб-проекта для сборки, вы можете создать скрипт msbuild с тем же именем, что и файл проекта с расширением wpp.targets ; он будет выбран процессом сборки, например, если ваш проект называется mywebproject.csprj, новый скрипт будет называться mywebproject.wpp.targets. Там вы можете поставить свои цели для запуска после конкретных целей встраивания. О собственности у вас есть много вариантов. Паоло пример хорош. Обычно я определяю пустое свойство по умолчанию, которое переопределяю параметрами сборки, или изменяю рабочий процесс, чтобы переопределить это свойство. В обычной сборке с Visual Studio мой параметр будет пустым, и я могу использовать его как условие для некоторых моих целей.

2) Я использую много $ (ProjectDir) и $ (_ PackageTempDir), когда я хочу включить дополнительные файлы в пакет msdeploy. $ (ProjectDir) будет работать и для вас. Он указывает на папку, в которой находится файл вашего проекта на сервере сборки.

Надеюсь, это поможет.

0 голосов
/ 12 июля 2010

Папка сборки:

Вы пробовали зарезервированное свойство MSBuild MSBuildProjectDirectory?

Вы можете получить доступ к нему так же, как и к другим свойствам, например, $(MSBuildProjectDirectory)\Binaries.Или ты имел ввиду что-то еще?

0 голосов
/ 30 июня 2010

Если вы используете шаблон процесса сборки по умолчанию (DefaultTemplate.xaml), который использует Windows Workflow Foundation вместо шаблона обновления, использующего MSBuild, то вы можете использовать действие рабочего процесса CopyDirectory, которое входит в комплект поставки, и поместить его между раздел компиляции и раздел тестирования рабочего процесса.

Какой шаблон процесса сборки вы используете в TFS 2010?

...