我有許多基於TFS中單個分支(例如Main)執行的構建定義。TFS:查詢包含特定變更集的版本
我想(以某種方式)查詢TFS來查找包含我提供的特定變更集編號的所有構建,並返回TFS包含的構建名稱的字符串列表。任何類型的應用程序(VS擴展,CLI應用程序,winforms,無論)都可以。
注意:這不是'PLZ給我代碼'的要求;我願意蹄子,並在這方面做認真的工作。任何指向如何查詢數據庫或SDK的文檔的指針,或者如何查詢構建的示例;只是一些地方開始尋找將是非常有益的。謝謝。
我有許多基於TFS中單個分支(例如Main)執行的構建定義。TFS:查詢包含特定變更集的版本
我想(以某種方式)查詢TFS來查找包含我提供的特定變更集編號的所有構建,並返回TFS包含的構建名稱的字符串列表。任何類型的應用程序(VS擴展,CLI應用程序,winforms,無論)都可以。
注意:這不是'PLZ給我代碼'的要求;我願意蹄子,並在這方面做認真的工作。任何指向如何查詢數據庫或SDK的文檔的指針,或者如何查詢構建的示例;只是一些地方開始尋找將是非常有益的。謝謝。
下面的代碼片段將抓取所有構建一個集合中的所有團隊項目的定義,並會檢查每個建立一個協會的輸入變更數量:
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帖子。
您可以在TFS 2010中使用這個小數據庫查詢,並用變更集ID替換90264。
USE Tfs_Warehouse
go
SELECT BuildName
FROM DimBuild
INNER JOIN FactBuildChangeset
ON DimBuild.BuildSK = FactBuildChangeset.BuildSK
WHERE FactBuildChangeset.ChangesetSK = 90264
謝謝!我希望在查詢時可以使用更多的過濾選項;我們有一些我們保留信息的構建版本,查詢返回需要很長時間。我會試驗看看。 – 2012-04-05 15:18:13