我有许多基于TFS中的单个分支执行的构建定义(例如Main)。
我想(以某种方式)查询TFS以查找包含我提供的特定变更集编号的所有构建,并返回TFS包含的构建名称的字符串列表。任何类型的应用程序(VS扩展,CLI应用程序,winforms,等等)都可以。
注意:这不是'请给我代码'请求;我愿意嘲笑它并在此做认真的工作。有关如何查询数据库或SDK的文档的任何指针,或者如何查询构建的示例;只是一些开始寻找的地方会非常有帮助。感谢。
答案 0 :(得分:9)
以下代码段将抓取Collection的所有Team Project的所有Build Definitions,并将检查关联到输入变更集编号的每个构建:
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&amp; here对于一些可能有趣的SO帖子。
答案 1 :(得分: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