c# - TFS API - 如何独立于它们属于哪个构建定义来查询构建

标签 c# api tfs tfsbuild build-definition

IBuildServer.QueryBuilds(...) 的重载似乎不允许我这样做。

这是我的代码:

TfsTeamProjectCollection tfs = context.GetValue(TeamProject);
IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
buildServer.QueryBuilds( // **what should i put here?**

我不想指定构建定义,因为我想要的构建可能是任何类型。

这个问题看起来很简单,但谷歌搜索没有给我任何答案。

最佳答案

此代码将获取所有构建。 . .曾经

TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("http://tfs:8080"));

var vcs = tfs.GetService<VersionControlServer>();

var teamProjects = vcs.GetAllTeamProjects(true);

IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));

foreach (TeamProject proj in teamProjects)
{
    var builds = buildServer.QueryBuilds(proj.Name);

    foreach (IBuildDetail build in builds)
    {
        var result = string.Format("Build {0}/{3} {4} - current status {1} - as of {2}",
        build.BuildDefinition.Name,
        build.Status.ToString(),
        build.FinishTime,
        build.LabelName,
        Environment.NewLine);

        System.Console.WriteLine(result);
    }            
}

但是,您可能对这段代码更感兴趣,它枚举每个团队项目并获取每个定义的最新构建状态:

TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("http://tfs:8080"));

var vcs = tfs.GetService<VersionControlServer>();

var teamProjects = vcs.GetAllTeamProjects(true);

IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));

foreach (TeamProject proj in teamProjects)
{
    var defs = buildServer.QueryBuildDefinitions(proj.Name);

    System.Console.WriteLine(string.Format("Team Project: {0}", proj.Name));

    foreach(IBuildDefinition def in defs)
    {
        IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(proj.Name, def.Name);
        spec.MaxBuildsPerDefinition = 1;
        spec.QueryOrder = BuildQueryOrder.FinishTimeDescending;

        var builds = buildServer.QueryBuilds(spec);

        if (builds.Builds.Length > 0)
        {
            var buildDetail = builds.Builds[0];

            System.Console.WriteLine(string.Format("   {0} - {1} - {2}", def.Name, buildDetail.Status.ToString(), buildDetail.FinishTime));
        }                
    }

    System.Console.WriteLine();
}

关于c# - TFS API - 如何独立于它们属于哪个构建定义来查询构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5263005/

相关文章:

c# - AreaRegistration.RegisterAllAreas() 在使用 Application Insights 时永远不会完成

c# - 当前的 .NET SDK 不支持面向 .NET Core 2.2。 (SDK 2.2.202)

java - 通过Java创建交换通用通讯组

powershell - 如何使用 TFS PowerShell 获取变更集和关联工作项的列表?

tfs - 在VSTS/VSO中解决任务(敏捷模板)

c# - 确定 MailItem 是否在撰写或阅读模式下打开

python - 如何使用 Python 订阅 Websocket API channel ?

api - 更改包装是否会使用protobuf破坏现有客户?

tfs - VSTS 构建不会删除 Web 应用程序的所有文件

c# - 在 C# 中更改 Windows 的书写语言