Я использую следующую цель в моей TFSBuild.proj:
Вводить новые цели в процессе сборки. Мы только вызвать зависимые сборки, если это «капля» была успешно создана:
<PropertyGroup>
<DropBuildDependsOn>
$(DropBuildDependsOn);
CreateDependentBuildItemGroup;
TriggerDependentBuilds;
</DropBuildDependsOn>
</PropertyGroup>
Создать ItemGroup, который содержит список зависимых строит, мы хотим, чтобы вызвать (атрибут Include перечислит имени зависимой сборки как он появляется в проводнике построения - в моем случае ниже зависимая сборка называется «Интеграция»). В нашем процессе сборки мы иногда хотим запускать более одной сборки, и мы хотим указать следующую сборку на двоичные файлы, которые были созданы текущей сборкой (в этом примере я хочу запустить тесты интеграции с создаваемыми исполняемыми файлами). Обратите внимание на хак, чтобы обойти пробелы в именах конфигураций - например, «Любой процессор» вызовет проблему в аргументах MsBuild. Используя этот формат, мы можем иметь настраиваемые аргументы MSBuild для зависимой сборки.
<Target Name="CreateDependentBuildItemGroup">
<ItemGroup>
<DependentBuild Include="Integration">
<!--Using 8dot3 format for "Mixed Platforms" as it's tricky (impossible?) to pass a space char within /msbuildarguments of tfsbuild-->
<MsBuildArgs>/p:CallingBuildDropFolder=$(DropLocation)\$(BuildNumber)\Mixedp~1\Ship;CiSmallBuildNumber=$(CiSmallBuildNumber);BuildNumberPostFix=$(BuildNumberPostFix)</MsBuildArgs>
<PriorityArg>/priority:AboveNormal</PriorityArg>
</DependentBuild>
</ItemGroup>
</Target>
Теперь запустите сборку. Обратите внимание, что мы используем Custom GetOption: мы хотим убедиться, что зависимые сборки используют тот же набор изменений, что и используемая текущая сборка, - мы не можем использовать Latest, потому что кто-то может быть зарегистрирован за это время, - поэтому мы хотим, чтобы все зависимые сборки наша «цепочка» для всех будет основана на том же наборе изменений. Фактическая команда находится в Exec, а материал BuildStep должен удостовериться, что мы сообщаем об успехе (или сбое) Exec.
<Target Name="TriggerDependentBuilds"
Condition=" '$(CompilationStatus)' == 'Succeeded' ">
<BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
BuildUri="$(BuildUri)"
Name="TriggerStep"
Message="Triggering Dependent Builds">
<Output TaskParameter="Id"
PropertyName="TriggerStepId" />
</BuildStep>
<PropertyGroup>
<TriggerBuildCommandBase>TfsBuild start $(TeamFoundationServerUrl) $(TeamProject)</TriggerBuildCommandBase>
</PropertyGroup>
<Exec
ContinueOnError="true"
WorkingDirectory="C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE"
Command="$(TriggerBuildCommandBase) %(DependentBuild.Identity) /queue /getOption:Custom /customGetVersion:$(GetVersion) %(DependentBuild.PriorityArg) /msbuildarguments:"%(DependentBuild.MsBuildArgs)"">
<Output TaskParameter="ExitCode"
ItemName="TfsBuildResult"/>
</Exec>
<BuildStep Condition="'@(TfsBuildResult)'=='0'"
TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
BuildUri="$(BuildUri)"
Id="$(TriggerStepId)"
Status="Succeeded" />
<BuildStep Condition="'@(TfsBuildResult)'!='0'"
TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
BuildUri="$(BuildUri)"
Id="$(TriggerStepId)"
Status="Failed" />
</Target>
Я надеюсь, что помогает ...
Не могли бы вы опубликовать полный файл? (и шаблон)? Спасибо –
Извините, перешли от этой работы и больше не имеют доступа. На самом деле, должно быть достаточно в вышеупомянутом ... –
Нет проблем. Выяснили это, используя шаблон определения сборки. –