यहाँ मैं कैसे पूरा किया है इस (http://sajojacob.com/2009/08/how-to-chain-tfs-builds/)
कैसे चेन TFS के लिए बनाता है? 5 अगस्त 200 9 को साजो द्वारा पोस्ट किया गया - कोई टिप्पणी नहीं ↓
मेरे सहयोगियों में से एक @gdurzi ने हाल ही में मुझसे यह प्रश्न पूछा। टीएफएस के साथ बॉक्स के बाहर समर्थित होने के लिए पर्याप्त सरल लगता है? इसके साथ बहुत सारे quirks। और मैं कभी वफादार MSBuild कार्य का उपयोग कर TFSBuild.exe करने के लिए एक कॉल करने के लिए इस
TFSBuild.exe की तरह कुछ के साथ पहली TFSBuild.proj से एक नए निर्माण क़तार में शुरू/कतार% TFSSVR%% TEAMPROJECT%% BUILDTYPE की सिफारिश की %
TFSBuild.exe का उपयोग करने में कोई समस्या यह है कि आप बिल्ड एजेंट को कमांड लाइन तर्क के रूप में पास नहीं कर सकते जो हमारे लिए एक सौदा ब्रेकर था।
ऐसे कई दृष्टिकोण हैं जिन्हें आप अपने विशेष परिदृश्य के आधार पर ले सकते हैं, इसलिए चलिए परिदृश्य को परिभाषित करते हैं, आपके पास मेनब्यूल्ड टीएफएस बिल्ड परिभाषा है जो आपके मूल प्रोजेक्ट का निर्माण करती है और आप चाहते हैं कि एकाधिक स्टेजिंग एक ही मेनबील्ड संकलन/भवन के लिए, लेकिन मेनब्यूल्ड को कॉल करने वाले आधार पर तैनाती के लिए कस्टम चरणबद्ध होना चाहिए। बहुत उपयोगी जब आपके पास ऐसा उत्पाद होता है जो प्रति क्लाइंट कस्टम प्री-बिल्ड और पोस्ट-बिल्ड क्रियाओं की आवश्यकता वाले एकाधिक ग्राहकों को रोल करता है। तो यहां टीएफएस 2008 के साथ बिल्ड चेनिंग करने का एक तरीका है।
चरण 1: चलो टीम फाउंडेशन ऑब्जेक्ट मॉडल का उपयोग करके कस्टम एमएसबिल्ड कार्य बनाएं जो बिल्ड परिभाषा फ़ाइल से जुड़े डिफ़ॉल्ट बिल्ड एजेंट का उपयोग करके निर्माण को कतारबद्ध करता है। INF कतारबद्ध के लिए
नमूना कोड: QueueTFS.cs
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Build.Client;
// Get the team foundation server.
TeamFoundationServer _tfsServer = TeamFoundationServerFactory.GetServer(_tfs);
// Get the IBuildServer
IBuildServer buildServer = (IBuildServer)_tfsServer.GetService(typeof(IBuildServer));
// Get the build definition for which a build is to be queued.
IBuildDefinition definition = buildServer.GetBuildDefinition(teamProject, buildDefinition);
// Create a build request for the build definition.
IBuildRequest request = definition.CreateBuildRequest();
request.CommandLineArguments = "Pass any custom command line args here"; // Ex: Custom Targets file
// Queue the build.
buildServer.QueueBuild(request, QueueOptions.None);
चरण 2: अब जहां मचान परिभाषा बिल्ड फ़ाइल बनाना चाहते TFS में एक नए फ़ोल्डर में QueueTFS.dll कॉपी।
अब एक न्यूनतम TFSBuild.proj फ़ाइल बनाएं जो हमारे नए MSBuild कार्य का उपयोग करता है और EndToEndIteration लक्ष्य को ओवरराइड करता है। यह हमारी स्टेजिंग बिल्ड परिभाषा होगी जो मेनब्यूल्ड बिल्ड को ट्रिगर करेगा। ध्यान दें कि आपको हाथ से यह TFSBuild.proj बनाना होगा और बिल्ड फ़ाइल परिभाषा UI से नए फ़ोल्डर में प्रोजेक्ट फ़ाइल स्थान को इंगित करना होगा।
एक न्यूनतम TFSBuild.proj के लिए
नमूना कोड:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
<UsingTask TaskName="MyNewCustomTFSTask" AssemblyFile="QueueTFS.dll"/>
<Target Name="EndToEndIteration">
<Message Text="About to trigger main build" Importance="high"/>
< MyNewCustomTFSTask TFS="http://TFSServer.com:8080/" TeamProject="TeamProject" BuildDefinition="Main_Build" TargetsFile="Custom.Target" XYZ="XYZ" />
<!-- When everything is done, change the status of the task to "Succeeded" -->
<SetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" TestStatus="Succeeded" CompilationStatus="Succeeded"/>
</Target>
</Project>
चरण 3: पूर्व निर्माण और बाद के निर्माण लक्ष्य कॉल के साथ अपने Main_Build TFSBuild.proj फ़ाइल को संपादित करें।
<Target Name=“BeforeCompile“>
<CallTarget Targets=“Custom_PreBuild“/>
</Target>
<Target Name=“AfterDropBuild“ Condition=“‘$(BuildBreak)’!=’true’“>
<CallTarget Targets=“Custom_PostBuild“/>
</Target>
हम चलाने के लिए और साथ ही अपने आप में Main_Build इस समर्थन करने के लिए हम अपने Main_Build TFSBuild.proj में सशर्त आयात जोड़ने एक डिफ़ॉल्ट लक्ष्य खाली Custom_PreBuild और Custom_PostBuild लक्ष्य के साथ फ़ाइल आयात करने की क्षमता, चाहता था। अब आप अपने लक्ष्यों को Custom_PreBuild और Custom_PostBuild लक्ष्य और आप के साथ Custom.Target और EmptyCustom.Target फ़ाइल बनाने: $ (CustomTarget) आप request.CommandLineArguments
<Import Project="$(CustomTarget)" Condition="'$(CustomTarget)'!=''"/>
<!--Import CustomContoso.Target if no partner is passed in—>
<Import Project="EmptyCustom.Target" Condition="'$(CustomTarget)'==''"/>
चरण 4 के लिए चरण 1 में एक कमांड लाइन तर्क के रूप में पास होता क्या है कार्य पूर्ण।
मैंने बिल्ड चरण और कुछ अन्य मामूली चीजों को अपडेट करने के लिए समर्थन जोड़ा जो इस ब्लॉग पोस्ट के दायरे से बाहर है, लेकिन उम्मीद है कि आपको शुरुआत मिलनी चाहिए।
हम CC.NET में स्विच कतार में एक्सटेंशन बनाएँ। – Sneal
मैंने सीसी.NET के साथ कई बार ऐसा किया है, मुझे लगता है कि टीएफएस के साथ ऐसा करने का एक साफ तरीका है, मुझे लगता है! – user22242