我试图使用TFS构建扩展来操纵构建代理的状态。 QueryBuildAgentStatus和SetBuildAgentStatus看起来完全相同,查询活动没有结果参数。
如何查询构建代理状态并进行更改?
-Thanks
答案 0 :(得分:0)
假设您正在使用XAML Build,我尝试在TFS数据库中的[Tfs_DefaultCollection].[dbo].[tbl_BuildAgent]
中监视构建代理状态。
如果构建代理就绪,您可以在tbl_BuildAgent中看到状态和已启用为“ 1 “和” 1 “。如果禁用构建代理,您可以在tbl_BuildAgent中看到状态和已启用为“ 1 ”和“的 0 强>”。如果停止在启用了构建代理的情况下构建服务,那么构建代理也会停止,您可以在tbl_BuildAgent中看到状态和已启用是“ 2 “和” 1 “。
一般来说,XAML构建代理具有就绪和停止状态(不确定您要更改什么)。如果要停止构建代理,只需停止构建服务。
以下是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");