2010-09-27 2 views
10

Это функция, с которой я привык от TeamCity - я мог указать, что определенная конфигурация сборки будет вызвана успехом другой конфигурации сборки.Trigger build, когда другой успешно завершился в TFS 2008

Я мог бы передать результаты одной сборки другому, но, возможно, это слишком много.

Я ищу аналогичную функциональность в TFS2008, есть ли способ установить триггер в конфигурации сборки, который он должен начать после того, как другой закончен успешно?

ответ

6

Я использую следующую цель в моей 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:&quot;%(DependentBuild.MsBuildArgs)&quot;"> 
     <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> 

Я надеюсь, что помогает ...

+0

Не могли бы вы опубликовать полный файл? (и шаблон)? Спасибо –

+0

Извините, перешли от этой работы и больше не имеют доступа. На самом деле, должно быть достаточно в вышеупомянутом ... –

+0

Нет проблем. Выяснили это, используя шаблон определения сборки. –

 Смежные вопросы

  • Нет связанных вопросов^_^