Build TFS:查询包含特定变更集的生成

Build TFS:查询包含特定变更集的生成,build,tfs-sdk,Build,Tfs Sdk,我有许多构建定义是基于TFS中的单个分支执行的(例如Main) 我希望(以某种方式)查询TFS以查找包含我提供的特定变更集编号的所有生成,并返回TFS包含的生成名称的字符串列表。任何类型的应用程序(VS扩展、CLI应用程序、winforms等)都可以 注意:这不是“请给我代码”请求;我愿意走下去,在这方面做认真的工作。任何指向如何查询数据库或SDK的文档的指针,或如何查询构建的示例;只要找个地方开始寻找就会非常有帮助。谢谢。以下代码片段将对集合中所有团队项目的所有生成定义进行爬网,并检查每个生成

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

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


注意:这不是“请给我代码”请求;我愿意走下去,在这方面做认真的工作。任何指向如何查询数据库或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);
                        }
                    }
                }
            }
        }
    }
}
使用系统;
使用System.Linq;
使用Microsoft.TeamFoundation.Build.Client;
使用Microsoft.TeamFoundation.Client;
使用Microsoft.TeamFoundation.VersionControl.Client;
命名空间FindChangesetInBuild
{
班级计划
{
静态void Main(字符串[]参数)
{
TfsTeamProjectCollection teamProjectCollection=TfsTeamProjectCollectionFactory.GetTeamProjectCollection(新Uri(“http://tfs:8080/tfs/collectionName"));
var versionControl=teamProjectCollection.GetService();
var buildService=(IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer));
var teamProjects=versionControl.GetAllTeamProjects(true);
foreach(teamProject中的var teamProject)
{
var buildDefinitions=buildService.QueryBuildDefinitions(teamProject.Name);
foreach(buildDefinitions中的var buildDefinition)
{
var builds=buildService.QueryBuilds(buildDefinition);
foreach(构建中的var buildDetail)
{
var changesets=InformationNodeConverters.getAssociatedChangeset(buildDetail);
if(changesets.Any(changesesummary=>changesesummary.ChangesetId==Convert.ToInt32(args[0]))
{
WriteLine(“变更集是在“+buildDetail.BuildNumber”中生成的);
}
}
}
}
}
}
}

不用说,这是一种暴力攻击。
如果你缩小
buildDefinition
列表的范围,专注于特定的
teamProjects
等,你可以进一步细化代码。无论如何,我很难想象上面的内容会有多大用处

除了(显然),TFS-SDK的一个很好的资源是Shai Raiten。
对于构建特定示例,还可以查看一些可能有趣的SO帖子。

您可以在TFS 2010中使用这个小DB查询,只需用变更集id替换90264即可

使用Tfs\u仓库
去
选择BuildName
来自DimBuild
内部联接FactBuildChangeset
在DimBuild.BuildSK=FactBuildChangeset.BuildSK上
其中FactBuildChangeset.ChangesetSK=90264

谢谢!我希望查询时有更多的过滤选项;我们保留了许多构建的信息,查询返回需要很长时间。我来试试看。