【问题标题】:query and manipulation of TFS build server agent status查询和操作 TFS 构建服务器代理状态
【发布时间】:2016-09-28 17:24:38
【问题描述】:

我正在尝试使用 TFS 构建扩展来操纵构建代理的状态。 QueryBuildAgentStatus 和 SetBuildAgentStatus 看起来相同,并且查询活动没有结果参数。
如何查询构建代理状态并进行更改?

-谢谢

【问题讨论】:

标签: tfs msbuild tfsbuild


【解决方案1】:

假设您正在使用 XAML Build,我尝试在 TFS 数据库中的 [Tfs_DefaultCollection].[dbo].[tbl_BuildAgent] 中监视构建代理状态。

如果构建代理Ready,你可以看到Status和tbl_BuildAgent中的Enabled是“1 ”和“1”。如果您禁用构建代理,您可以看到 tbl_BuildAgent 中的 StatusEnabled 为“1”和“ 0”。如果您在启用构建代理的情况下停止构建服务,那么构建代理也会停止,您可以看到 tbl_BuildAgent 中的 StatusEnabled 为 " 2”和“1”。

所以一般来说,XAML 构建代理有 ReadyStop 状态(不确定您要更改什么)。如果要停止构建代理,只需停止构建服务即可。

这是LinqPad query to get Build agents status and build queue,你可以看看:

var tfs = TfsTeamProjectCollectionFactory
 .GetTeamProjectCollection(new Uri("http://localhost:8088/tfs"));

tfs.EnsureAuthenticated();

var buildServer = tfs.GetService<IBuildServer>();

var queryAgents = buildServer.QueryBuildAgents(buildServer.CreateBuildAgentSpec());
queryAgents.Agents
 .Select(x => new
 {
  x.MachineName,
  Controller = x.Controller.Name,
  x.Enabled,
  x.Status,
  x.QueueCount
 })
 .Dump("TFS build agents");

queryAgents.Agents
 .SelectMany(x => ServiceController.GetServices(x.ServiceHost.Name)
  .Where(s => s.ServiceName.StartsWith("TFSBuildServiceHost")))
 .Select(x => new
 {
  x.MachineName,
  x.ServiceName,
  x.Status
 })
 .Dump("Windows Services of build agents");

buildServer
 .QueryQueuedBuilds(buildServer.CreateBuildQueueSpec("*"))
 .QueuedBuilds
 .Select(x => new
 {
  x.TeamProject,
  BuildDefinition = x.BuildDefinition.Name,
  x.QueuePosition,
  x.QueueTime,
  x.Priority,
  x.CustomGetVersion,
  x.RequestedFor,
  x.Reason,
  x.Status
 })
 .OrderBy(x => x.QueuePosition)
 .Dump("Queued builds");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2014-04-01
    • 2015-04-25
    • 2011-08-29
    相关资源
    最近更新 更多