假设您正在使用 XAML Build,我尝试在 TFS 数据库中的 [Tfs_DefaultCollection].[dbo].[tbl_BuildAgent] 中监视构建代理状态。
如果构建代理Ready,你可以看到Status和tbl_BuildAgent中的Enabled是“1 ”和“1”。如果您禁用构建代理,您可以看到 tbl_BuildAgent 中的 Status 和 Enabled 为“1”和“ 0”。如果您在启用构建代理的情况下停止构建服务,那么构建代理也会停止,您可以看到 tbl_BuildAgent 中的 Status 和 Enabled 为 " 2”和“1”。
所以一般来说,XAML 构建代理有 Ready 和 Stop 状态(不确定您要更改什么)。如果要停止构建代理,只需停止构建服务即可。
这是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");