這是我從TeamCity中習以爲常的特性 - 我可以指定某個生成配置將由另一個生成配置的成功觸發。當TFS 2008中的另一個成功完成時觸發生成
我甚至可以將一個構建的結果傳遞給另一個構建 - 但也許這是太多了。
我正在尋找類似的功能在TFS2008,有沒有辦法在一個構建配置上設置觸發器,它應該在另一個成功完成後啓動?
這是我從TeamCity中習以爲常的特性 - 我可以指定某個生成配置將由另一個生成配置的成功觸發。當TFS 2008中的另一個成功完成時觸發生成
我甚至可以將一個構建的結果傳遞給另一個構建 - 但也許這是太多了。
我正在尋找類似的功能在TFS2008,有沒有辦法在一個構建配置上設置觸發器,它應該在另一個成功完成後啓動?
我用下面的目標在我TFSBuild.proj:
注入新的指標納入構建過程。我們只觸發相關的建立,如果一個「降」已成功創建:
<PropertyGroup>
<DropBuildDependsOn>
$(DropBuildDependsOn);
CreateDependentBuildItemGroup;
TriggerDependentBuilds;
</DropBuildDependsOn>
</PropertyGroup>
創建包含相關的列表構建我們要觸發的ItemGroup(中包含的屬性將列出相關的構建的名因爲它出現在構建資源管理器中 - 在我的情況下,依賴構建被稱爲「集成」)。在我們的構建過程中,我們有時需要觸發多個構建,並且我們希望將下一個構建指向由當前構建生成的二進制文件(在本例中,我想對所生成的二進制文件運行集成測試)。注意hack繞過配置名稱中的空格 - 例如「Any CPU」會在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>
現在,觸發構建。請注意,我們使用自定義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>
我希望幫助...
你可以發佈完整的文件? (和模板)?謝謝 – 2012-11-06 11:18:21
對不起 - 從該工作繼續前進,不再有權限。真的,在上面tho應該有足夠的... – 2012-11-06 15:25:00
沒問題。使用構建定義模板弄明白了。 – 2012-11-06 19:31:54