2013-10-17 5 views
5

मैं टैग से निर्माण करने के लिए टीएफएस 2013 में एक विशेष निर्माण परिभाषा बनाना चाहता हूं। उस परियोजना में प्रयुक्त स्रोत नियंत्रण गिट है।गिट टैग से निर्माण करने के लिए TFS 2013 बिल्ड परिभाषा को कैसे सेट करें?

तो, मान लें कि मेरे पास v1.0 नामक एक टैग है। मैं चाहता हूं कि इस बिल्ड परिभाषा को उस टैग से संबंधित स्रोतों को खींचें और एक बिल्ड चलाएं। ट्रिगर अब के लिए कोई फर्क नहीं पड़ता - यह भी मैनुअल हो सकता है। वो कैसे संभव है?

मैं देख सकता हूँ तुम ही स्रोत सेटिंग टैब पर शाखा चुनने का विकल्प है ...

उन्नत परिदृश्य पर विचार करें: जब एक नया टैग बनाने के बाद निर्माण शुरू हो रहा है, और कहा कि नव स्रोतों से लेता है एक निर्माण चलाने के लिए बनाया टैग। क्या यह संभव है? यदि हां, तो कैसे?

मैं एमएसडीएन पर समझाए गए सादे डिफ़ॉल्ट परिदृश्यों के अलावा कोई जानकारी नहीं ढूंढ पाया। शायद, क्योंकि विन्यास (गिट मोड में टीएफएस 2013) काफी नया है ...

अग्रिम धन्यवाद।

उत्तर

12

मैंने कुछ जांच की है और डिफ़ॉल्ट रूप से टीएफएस ऑफ़र के साथ खेला है। ईमानदार होने के लिए, मैंने वर्णित मूल परिदृश्य को काफी कवर किया है।

Git के लिए डिफ़ॉल्ट निर्माण टेम्पलेट निर्माण तर्क Checkout override कहा जाता है:

enter image description here

यह फ़ील्ड या तो टैग नाम, या बस संशोधन की आईडी आप से निर्माण करना चाहते हैं स्वीकार करता है:

enter image description here

अच्छी बात यह है कि यह सेटिंग ओवरराइड (जैसे नाम बताती है :)) डिफ़ॉल्ट शाखा। मेरा मतलब है, अगर आपने मास्टर शाखा से एक टैग बनाया है, लेकिन बिल्ड परिभाषा के स्रोत टैब पर एक और शाखा निर्दिष्ट की है, तो इससे कोई फर्क नहीं पड़ता - Checkout override वरीयता लेता है।

मैं उन्नत परिदृश्य की जांच करने की कोशिश करूंगा (मेरे प्रश्न में वर्णित)। मुझे लगता है कि कुछ कस्टम कोड होंगे ... यहां अपडेट पोस्ट करेंगे।

अद्यतन डीईसी 23, 2013 जैसा कि उम्मीद है, से बनाने के लिए टैग चुनने में सक्षम होने के लिए, कुछ कस्टम कोड की आवश्यकता है। मैं एक कस्टम संपादक बनाने और Checkout override फ़ील्ड को असाइन करने के लिए समाप्त हुआ। नतीजतन, वहां कोई संशोधन आईडी पेस्ट करने का कोई विकल्प नहीं है, केवल सूची से एक टैग चुनें - लेकिन यह मेरे मामले के लिए ठीक है।

तो, सबसे पहले आपको किसी फ़ील्ड के लिए एक कस्टम संपादक बनाना चाहिए। असल में, एक वर्ग बनाएं, इसे System.Drawing.Design.UITypeEditor कक्षा से प्राप्त करें और कुछ विधियों को ओवरराइड करें। This walkthrough ने बहुत मदद की, साथ ही साथ this book (अध्याय 18 "बिल्ड प्रक्रिया को अनुकूलित करना")।

जो एक विशिष्ट TFS टीम परियोजना की एक विशिष्ट Git रेपो से टैग की सूची हो जाता है उपयोगी कोड यहाँ है:

private List<string> GetAvailableTags(IServiceProvider provider) 
{ 
    // obtain the current build definition object 
    var buildDefinition = (IBuildDefinition)provider.GetService(typeof(IBuildDefinition)); 
    // obtain the current source provider for the build definition (Git or TFVC) 
    var sourceProvider = buildDefinition.GetDefaultSourceProvider(); 

    // obtain the project collection 
    var teamProjectCollection = buildDefinition.BuildServer.TeamProjectCollection; 
    // obtain a service object to communicate with Git repo 
    var gitRepoService = teamProjectCollection.GetService<GitRepositoryService>(); 

    // this will get the partial URL of the Git repo (in a form <teamproject>/<repo>) 
    var repoUrl = sourceProvider.Fields[BuildSourceProviders.GitProperties.RepositoryName]; 

    string projectName; 
    string repoName; 

    // this is the way to parse the partial URL obtained above, into project name and repo name 
    if (BuildSourceProviders.GitProperties.ParseUniqueRepoName(repoUrl, out projectName, out repoName)) 
    { 
    // this will get all Git repos of the current team project 
    var source = gitRepoService.QueryRepositories(projectName); 
    // this will take the current Git repo we work with 
    var repo = source.First(x => x.Name.Equals(repoName, StringComparison.OrdinalIgnoreCase)); 
    // this will get all the tags in this Git repo 
    var tags = gitRepoService.QueryRefs(repo.Id, "tags"); 

    // and finally, the list of pure tag names is returned 
    return tags.Select(gitRef => gitRef.Name.Substring("refs/tags/".Length)).ToList(); 
    } 

    return new List<string>(); 
} 

कस्टम संपादक के साथ DLL मेरे मामले में वी.एस. (के लिए दिखाई दे किया जाना चाहिए , मैंने असेंबली को मेरे वीएस इंस्टॉलेशन के Common7\IDE\PrivateAssemblies\ फ़ोल्डर में रखा है)।फिर, क्षेत्र मेटाडेटा संपादक में आप इच्छित क्षेत्र के लिए कस्टम संपादक का होना चाहिए: अगर हम निर्माण परिभाषा बदलने, या एक नए निर्माण कतार

enter image description here

और अब, हम से आवश्यक टैग का चयन कर सकते लटकती:

enter image description here

आशा इस आप कुछ समय की बचत होती है।

+1

क्या आप एएलएम रेंजर्स बिल्ड कम्युनिटी एक्सटेंशन में इस स्निपेट का योगदान करेंगे? http://tfsbuildextensions.codeplex.com/ – jessehouwing

+0

यह एक अच्छा विचार है। क्या आप कृपया उस सटीक स्थान को इंगित कर सकते हैं जिसमें यह फिट बैठता है? –

+0

मैंने रेंजर टीम को अधिसूचित किया है जो इसे बनाए रखता है। यदि आप सूत्रों के साथ एक ज़िप फ़ाइल अपलोड करने के लिए "अपलोड पैच" सुविधा का उपयोग कर सकते हैं, तो मुझे लगता है कि मैं उन्हें शामिल करने के लिए प्रक्रिया को गति में सेट कर सकता हूं ... http://tfsbuildextensions.codeplex.com/SourceControl/latest – jessehouwing

संबंधित मुद्दे