团队构建 - 成为无法访问后自动启用代理

时间:2009-06-30 20:12:39

标签: tfs continuous-integration build-automation

我们有一个中央Team Foundation Server(2008)部署,其中存储了所有项目。每个项目都会设置自己的构建服务器,运行Team Build来执行自己的自动构建。

这是问题所在。当在TFS和Team Build服务器之间检测到连接错误时,它会将构建代理的状态移动到“无法访问”,这意味着它不可用于任何后续构建。我们的服务器已安排重启窗口,当TFS在该窗口期间无法与这些代理通信(反之亦然)时,它会将代理移动到“无法访问”。每天早上我们进来发现我们必须手动进入并重新启用代理。

是否有可能让团队建立代理商在他们再次可用时重新上线?或者编写一个脚本,让它们自动恢复在线状态?

2 个答案:

答案 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()
        }
    }
}