2012-04-04 12 views
6

मेरे पास कई बिल्ड परिभाषाएं हैं जिन्हें टीएफएस (जैसे मुख्य) में एक शाखा के आधार पर निष्पादित किया जाता है।टीएफएस: एक विशिष्ट बदलाव युक्त निर्माण के लिए क्वेरी

मैं (किसी भी तरह) टीएफएस को उन सभी बिल्डों को ढूंढने के लिए पूछता हूं जो एक विशिष्ट परिवर्तन संख्या है जो मैं आपूर्ति करता हूं, और टीएफएस के निर्माण के नामों की स्ट्रिंग की एक सूची लौटाता हूं। किसी भी प्रकार का ऐप (वीएस एक्सटेंशन, सीएलआई ऐप, विनफॉर्म, जो कुछ भी) करेगा।

नोट: यह 'कृपया मुझे कोड दें' अनुरोध नहीं है; मैं इसे खोने के लिए तैयार हूं और इस पर गंभीर काम करता हूं। डेटाबेस या एसडीके से पूछताछ करने के तरीके पर दस्तावेज़ों के लिए कोई संकेतक, या निर्माण के तरीके के बारे में एक उदाहरण; दिखने के लिए बस कुछ जगह बेहद सहायक होगी। धन्यवाद।

उत्तर

8

निम्नलिखित स्निपेट सभी क्रॉल करेगा एक संग्रह के सभी टीम परियोजना की परिभाषा का निर्माण, और प्रत्येक की जाँच करेगा और हर इनपुट changeset संख्या के लिए एक एसोसिएशन के लिए निर्माण:

using System; 
using System.Linq; 
using Microsoft.TeamFoundation.Build.Client; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.VersionControl.Client; 

namespace FindChangesetInBuild 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs:8080/tfs/collectionName")); 

      var versionControl = teamProjectCollection.GetService<VersionControlServer>(); 
      var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer)); 

      var teamProjects = versionControl.GetAllTeamProjects(true); 
      foreach (var teamProject in teamProjects) 
      { 
       var buildDefinitions = buildService.QueryBuildDefinitions(teamProject.Name); 
       foreach (var buildDefinition in buildDefinitions) 
       { 
        var builds = buildService.QueryBuilds(buildDefinition); 
        foreach (var buildDetail in builds) 
        { 
         var changesets = InformationNodeConverters.GetAssociatedChangesets(buildDetail); 
         if (changesets.Any(changesetSummary => changesetSummary.ChangesetId == Convert.ToInt32(args[0]))) 
         { 
          Console.WriteLine("Changeset was build in "+buildDetail.BuildNumber); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

जरूरत नहीं कहने के लिए, यह है एक क्रूर बल हमला।
यदि आप buildDefinition की सूची को संकुचित करते हैं, तो आप कोड को और परिशोधित कर सकते हैं, विशिष्ट teamProjects आदि पर ध्यान केंद्रित करें। किसी भी मामले में मैं शायद उपर्युक्त कल्पना करने के लिए कल्पना कर सकता हूं!

(स्पष्ट रूप से) MSDN के अलावा, टीएफएस-एसडीके के लिए एक महान संसाधन शाई राइटन blog है।
बिल्ड-स्पीफिक उदाहरणों के लिए, कुछ संभावित रोचक एसओ पोस्ट के लिए here & here भी देखें।

+0

धन्यवाद! मेरी इच्छा है कि पूछताछ के दौरान अधिक फ़िल्टरिंग विकल्प उपलब्ध हों; हमारे पास कई बिल्ड हैं जिनके लिए हम जानकारी बरकरार रखते हैं और प्रश्नों को वापस करने में बहुत लंबा समय लगता है। मैं प्रयोग और देखूँगा। –

2

आप टीएफएस 2010 में इस छोटी डीबी क्वेरी का उपयोग कर सकते हैं और अपने परिवर्तन आईडी के साथ बस 90264 को प्रतिस्थापित कर सकते हैं।

USE Tfs_Warehouse 
go 
SELECT BuildName 
FROM DimBuild 
    INNER JOIN FactBuildChangeset 
    ON DimBuild.BuildSK = FactBuildChangeset.BuildSK 
WHERE FactBuildChangeset.ChangesetSK = 90264 
संबंधित मुद्दे