2012-04-04 52 views
6

我有許多基於TFS中單個分支(例如Main)執行的構建定義。TFS:查詢包含特定變更集的版本

我想(以某種方式)查詢TFS來查找包含我提供的特定變更集編號的所有構建,並返回TFS包含的構建名稱的字符串列表。任何類型的應用程序(VS擴展,CLI應用程序,winforms,無論)都可以。

注意:這不是'PLZ給我代碼'的要求;我願意蹄子,並在這方面做認真的工作。任何指向如何查詢數據庫或SDK的文檔的指針,或者如何查詢構建的示例;只是一些地方開始尋找將是非常有益的。謝謝。

回答

8

下面的代碼片段將抓取所有構建一個集合中的所有團隊項目的定義,並會檢查每個建立一個協會的輸入變更數量:

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,TFS-SDK的一個很好的資源是Shai Raiten的blog
對於Build-Speficic示例,請查看here & here,瞭解一些可能感興趣的SO帖子。

+0

謝謝!我希望在查詢時可以使用更多的過濾選項;我們有一些我們保留信息的構建版本,查詢返回需要很長時間。我會試驗看看。 – 2012-04-05 15:18:13

2

您可以在TFS 2010中使用這個小數據庫查詢,並用變更集ID替換90264。

USE Tfs_Warehouse 
go 
SELECT BuildName 
FROM DimBuild 
    INNER JOIN FactBuildChangeset 
    ON DimBuild.BuildSK = FactBuildChangeset.BuildSK 
WHERE FactBuildChangeset.ChangesetSK = 90264 
相關問題