2010-09-27 32 views
10

Đây là tính năng tôi đã quen thuộc từ TeamCity - Tôi có thể chỉ định rằng một cấu hình xây dựng nhất định sẽ được kích hoạt bởi sự thành công của cấu hình xây dựng khác.Xây dựng trình kích hoạt khi kết thúc thành công khác trong TFS 2008

Tôi thậm chí có thể chuyển kết quả của một bản dựng này sang bản dựng khác - nhưng có lẽ điều này đang đòi hỏi quá nhiều.

Tôi đang tìm một chức năng tương tự trong TFS2008, có cách nào để đặt trình kích hoạt trên cấu hình xây dựng mà nó sẽ bắt đầu sau khi hoàn thành thành công không?

Trả lời

6

Tôi sử dụng mục tiêu sau trong TFSBuild.proj:

Tiêm các mục tiêu mới vào quá trình xây dựng. Chúng tôi chỉ kích hoạt phụ thuộc xây dựng nếu một "thả" đã được tạo thành công:

<PropertyGroup> 
    <DropBuildDependsOn> 
     $(DropBuildDependsOn); 
     CreateDependentBuildItemGroup; 
     TriggerDependentBuilds; 
    </DropBuildDependsOn> 
</PropertyGroup> 

Tạo một ItemGroup có chứa một danh sách các phụ thuộc xây dựng chúng tôi muốn kích hoạt (thuộc tính Bao gồm sẽ liệt kê các tên của việc xây dựng phụ thuộc vì nó xuất hiện trong trình thám hiểm xây dựng - trong trường hợp của tôi bên dưới, xây dựng phụ thuộc được gọi là "Tích hợp"). Trong quá trình xây dựng của chúng tôi, đôi khi chúng tôi muốn kích hoạt nhiều bản dựng và chúng tôi muốn chỉ việc xây dựng tiếp theo tại các tệp nhị phân được tạo bởi phiên bản hiện tại (trong ví dụ này, tôi muốn chạy các kiểm tra Tích hợp với các tệp nhị phân được tạo). Chú ý rằng hack để có được khoảng trống trong các tên cấu hình - ví dụ "Any CPU" sẽ gây ra một vấn đề trong MsBuild args. Sử dụng định dạng này, chúng tôi có thể có tùy chỉnh MSBuild args cho mỗi xây dựng phụ thuộc.

<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> 

Bây giờ, kích hoạt các bản dựng. Lưu ý rằng chúng ta sử dụng Custom GetOption: chúng ta muốn đảm bảo rằng các build phụ thuộc sử dụng cùng một changeset mà build hiện tại sử dụng - chúng ta không thể sử dụng Latest, cos ai đó có thể đã check in trong thời gian chờ đợi - vì vậy chúng ta muốn tất cả các build phụ thuộc vào "chuỗi" của chúng tôi cho tất cả được dựa trên cùng một changeset. Lệnh thực tế nằm trong Exec, và công cụ BuildStep là đảm bảo rằng chúng ta báo cáo thành công (hoặc thất bại) của 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> 

Tôi hy vọng rằng sẽ giúp ...

+0

bạn có thể đăng các tập tin hoàn chỉnh? (và mẫu)? Cảm ơn –

+0

Rất tiếc - đã chuyển từ công việc đó và không còn quyền truy cập nữa. Thực sự, phải có đủ trong tho trên .... –

+0

Không sao cả. Đã tìm ra bằng cách sử dụng mẫu định nghĩa xây dựng. –

Các vấn đề liên quan