【问题标题】:How to get TFS Build demands for running builds如何获取运行构建的 TFS 构建需求
【发布时间】:2017-08-10 13:43:26
【问题描述】:

我正在尝试使用 TFS 2015 客户端 API 来获取新构建器系统的构建详细信息。 我已经走得很远了,

使用 GetBuildsAsync 我可以获取当前正在运行的构建,但并非所有属性都已填充。

var buildClient = new BuildHttpClient(new Uri(m_myCollectionUrl, UriKind.Absolute), cred);
Build[] buildsInProgress = (buildClient.GetBuildsAsync(projectName, statusFilter: Microsoft.TeamFoundation.Build.WebApi.BuildStatus.InProgress)).Result.ToArray();

即使构建定义有一个或多个默认需求,Build.Demands 列表也始终为空,而且在构建队列时指定另一个时,它也不会使用 API 显示。该列表始​​终为空。

我现在尝试了几种方法 buildClient.GetFullDefinitionsAsync - 导致 BuildDefinition 要求 = null buildClient.GetDefinitionAsync - 生成一个 BuildDefinition,其中的需求由定义中的默认需求填充,但只有我们自己定义的需求,而不是系统的需求。 buildClient.GetBuildsAsync - 导致 Build 的需求为空 所以我仍然没有找到一个调用,我可以在其中获取已用于查找的需求 BuildAgent。为了进行上述测试,我正在运行一个包含 2 个“存在”需求的测试版本,并且我在排队时指定了另一个,但我无法找到。

我无法在网上找到很多相关信息。我应该怎么做才能获得有关构建的更多详细信息。

谢谢。

【问题讨论】:

  • 当您获得构建定义的详细信息而不是正在运行的构建时,Demands 的结果是什么?
  • 我现在已经尝试了几种方法 buildClient.GetFullDefinitionsAsync - 导致 BuildDefinition 要求 = null我们自己定义的那些。 buildClient.GetBuildsAsync - 导致需求为空的构建所以我仍然没有找到可以获取已用于查找该 BuildAgent 的需求的调用。为了进行上述测试,我正在运行一个包含 2 个“存在”需求的测试版本,并且我在队列时间指定了另一个,但我无法找到。
  • 得到了和你一样的结果,恐怕value=null是由于需求存在而不是equals。实际上,它在门户网站中没有任何价值。

标签: tfs tfs-sdk


【解决方案1】:

需求是 vNext 构建系统中的一个新功能。使用Rest API 获取构建详细信息或构建定义时,响应 json 中也没有任何相关的默认需求信息。

恐怕这是由于某些默认需求设置存在,并且该值为null。如果您手动添加 equals 的需求,这将返回相应的值。

getting build definition的rest api中的响应json,将得到如下内容:

“要求”:[ "agentname -equals test"],

建议您使用客户端API获取构建定义信息,如果有equals设置,这将返回一些需求值。

  public static DefinitionReference[] GetBuildDefinitions(this BuildHttpClient buildServer, string collectionName)
    {
        var buildDefinitions = buildServer.GetDefinitionsAsync(project: collectionName).Result.ToList();
        return buildDefinitions.ToArray();
    }

更新

恐怕您无法使用客户端 API 来获取构建定义和代理队列位置的默认系统需求列表。它是基于 TFS 服务器的。它无法使用客户端 API 来获取 TFS 服务器端信息。

【讨论】:

  • 我不确定你的意思。获取 DefinitionReference 不包含太多有用的信息。无论我指定什么需求,即使是具有等于和值的需求,我都不会在 Build 或 BuildDefinition 中使用客户端 API 获得任何需求。
  • 我似乎也无法获得的是队列位置。我现在创建了一个等待可用代理的构建,我可以看到它在客户端 API 中获得状态 NotStarted,但 QueuePosition 仍然为空,而 Web 界面能够告诉我队列位置为 2。我们如何能够检索这些详细信息,因此我们可以构建队列中等待的所有构建的列表
  • 澄清一下,不是Demand.Value为null,而是Build.Demand列表为0或null。
  • @Nico 担心您无法使用客户端 API 来获取构建定义和代理队列位置的默认系统需求。它是基于 TFS 服务器的。它无法使用客户端 API 来获取 TFS 服务器端信息。
  • 很遗憾,是否还有其他方法可以通过编程方式检索此信息?提供的 TFS 构建概述对于我们的环境来说还不够好。
猜你喜欢
  • 1970-01-01
  • 2014-08-07
  • 2017-03-21
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多