मैं अपने TFSBuild.proj में निम्नलिखित लक्ष्य का उपयोग करें:
निर्माण प्रक्रिया में नए लक्ष्य सम्मिलित करें। हम केवल निर्भर बनाता है, तो एक "ड्रॉप" सफलतापूर्वक बनाया गया था को गति प्रदान:
<PropertyGroup>
<DropBuildDependsOn>
$(DropBuildDependsOn);
CreateDependentBuildItemGroup;
TriggerDependentBuilds;
</DropBuildDependsOn>
</PropertyGroup>
एक itemgroup कि निर्भर की एक सूची है बनाता है हम ट्रिगर करते हैं बनाएं (शामिल विशेषता निर्भर निर्माण के नाम सूची जाएगा जैसा कि यह निर्माण एक्सप्लोरर में दिखाई देता है - नीचे दिए गए मेरे मामले में, आश्रित निर्माण को "एकीकरण" कहा जाता है)। हमारी निर्माण प्रक्रिया में, हम कभी-कभी एक से अधिक निर्माण को ट्रिगर करना चाहते हैं, और हम वर्तमान निर्माण द्वारा उत्पादित बाइनरी पर अगले निर्माण को इंगित करना चाहते हैं (इस उदाहरण में, मैं उत्पादित द्विआधारी के खिलाफ एकीकरण परीक्षण चलाने के लिए चाहता हूं)। कॉन्फ़िगरेशन नामों में चारों ओर रिक्त स्थान प्राप्त करने के लिए हैक पर ध्यान दें - उदाहरण के लिए "कोई भी CPU" एमएसबिल्ड तर्कों में कोई समस्या पैदा करेगा। इस प्रारूप का उपयोग करके, हम प्रति निर्भर निर्माण के लिए कस्टम 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>
अब, बिल्ड को ट्रिगर करें। ध्यान दें कि हम कस्टम गेटऑप्शन का उपयोग करते हैं: हम यह सुनिश्चित करना चाहते हैं कि आश्रित एक ही बदलाव का उपयोग करता है जो वर्तमान निर्माण का उपयोग करता है - हम नवीनतम का उपयोग नहीं कर सकते हैं, इस दौरान किसी ने चेक इन किया हो सकता है - इसलिए हम सभी आश्रितों को बनाना चाहते हैं हमारी "श्रृंखला" सभी एक ही बदलाव के आधार पर हो। वास्तविक आदेश 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>
मुझे आशा है कि मदद करता है ...
स्रोत
2010-09-27 16:11:42
आप पूरी फाइल पोस्ट कर सकते हैं? (और टेम्पलेट)? धन्यवाद –
क्षमा करें - उस नौकरी से चले गए और अब पहुंच नहीं है। वास्तव में, उपरोक्त में पर्याप्त होना चाहिए .... –
कोई समस्या नहीं है। बिल्ड परिभाषा टेम्पलेट का उपयोग करके इसे समझ लिया। –