6

我有许多基于 TFS 中的单个分支(例如 Main)执行的构建定义。

我想(以某种方式)查询 TFS 以查找包含我提供的特定变更集编号的所有构建,并返回 TFS 包含的构建名称的字符串列表。任何类型的应用程序(VS 扩展程序、CLI 应用程序、winforms 等等)都可以。

注意:这不是“请给我代码”请求;我愿意为此付出努力并认真工作。任何指向有关如何查询数据库或 SDK 的文档的指针,或如何查询构建的示例;只是一些开始寻找的地方将非常有帮助。谢谢。

4

2 回答 2

9

以下代码段将抓取集合的所有团队项目的所有构建定义,并将检查每个构建是否与输入变更集编号的关联:

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之外,Shai Raiten 的博客是 TFS-SDK 的一个很好的资源。
对于特定于构建的示例,请在此处此处查看一些可能有趣的 SO 帖子。

于 2012-04-05T11:31:36.890 回答
2

您可以在 TFS 2010 中使用这个小数据库查询,只需将 90264 替换为您的变更集 ID。

USE Tfs_Warehouse
go
SELECT BuildName 
FROM DimBuild
   INNER JOIN FactBuildChangeset
   ON DimBuild.BuildSK = FactBuildChangeset.BuildSK
WHERE FactBuildChangeset.ChangesetSK = 90264
于 2013-02-07T23:16:43.547 回答