我们有一个中央Team Foundation Server(2008)部署,其中存储了所有项目。每个项目都会设置自己的构建服务器,运行Team Build来执行自己的自动构建。
这是问题所在。当在TFS和Team Build服务器之间检测到连接错误时,它会将构建代理的状态移动到“无法访问”,这意味着它不可用于任何后续构建。我们的服务器已安排重启窗口,当TFS在该窗口期间无法与这些代理通信(反之亦然)时,它会将代理移动到“无法访问”。每天早上我们进来发现我们必须手动进入并重新启用代理。
是否有可能让团队建立代理商在他们再次可用时重新上线?或者编写一个脚本,让它们自动恢复在线状态?
答案 0 :(得分:2)
在TFS2008中,AT应该定期(15-30分钟,不能记住当前的间隔)ping不可到达的构建代理,以查看它是否已备份。你没有看到这种行为 - 你的存在吗?
也就是说,可以编写一些可以定期运行的.NET代码来设置构建代理的状态。或者,您可以在作为构建代理运行的Windows机器上启动后将其作为计划任务运行,以便与TFS通信并将其状态设置为良好状态。
要编写代码,您需要使用TFS Build API(Microsoft.TeamFoundation.Build.Client)。特别要查看IBuildAgent。从IBuildServer获取适当的一个,更改状态,然后调用buildAgent.Save()。
答案 1 :(得分:1)
我自己也看到了这个问题 - 这是一个Powershell脚本,它将迭代所有Team Projects上的所有构建代理并启用它们。请注意,代理将更新为立即启用,无论它们是否有效(因此,如果构建服务器在脚本运行时仍然关闭 - 一旦构建触发 - 它将恢复为无法访问)
$serverName = "TFSRTM08"
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.WorkItemTracking.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")
$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName)
$wit = $tfs.GetService("Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore")
$bld = $tfs.GetService("Microsoft.TeamFoundation.Build.Client.IBuildServer")
$prjs = $wit.Projects
foreach ($proj in $prjs)
{
$agents = $bld.QueryBuildAgents($proj.Name)
foreach ($agent in $agents)
{
if ($agent.Status -ne "Enabled")
{
Write-Output "Enabling Build Agent: " $agent.Name " on Team Project: " $proj.Name " status was " $agent.Status
$agent.Status = "Enabled"
$agent.Save()
}
}
}