Team Build - автоматически включаемый агент после того, как он становится недоступным
У нас есть центральное развертывание Team Foundation Server (2008), где хранятся все проекты. Каждый проект настраивает свой собственный сервер сборки, на котором работает Team Build, для выполнения своих собственных автоматических сборок.
Здесь проблема. Когда обнаруживается ошибка соединения между TFS и сервером Team Build, он переводит статус агента сборки в "недоступный", что означает, что он недоступен для любых последующих сборок. На наших серверах запланированы окна перезагрузки, и когда TFS не может связаться с этими агентами (или наоборот) во время этого окна, он переводит агента в "недоступный". Каждое утро мы заходим и обнаруживаем, что должны вручную войти и снова включить агента.
Возможно ли, чтобы агенты по построению команды вернулись в онлайн, как только они снова станут доступны? Или, может быть, написать сценарий, который автоматически возвращает их в онлайн?
2 ответа
Я тоже видел эту проблему - вот сценарий Powershell, который будет перебирать всех агентов сборки во всех командных проектах и включать их. Обратите внимание, что агенты будут обновлены для немедленного включения независимо от того, являются ли они действительными (поэтому, если сервер сборки все еще не работает во время запуска сценария - как только запускается сборка - он вернется к Недоступному)
$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()
}
}
}
В TFS2008 AT должен проверять связь с недоступным агентом сборки на регулярной основе (15–30 минут, не может вспомнить интервал в данный момент), чтобы проверить, работает ли он. Разве ты не видишь такого поведения - твои остаются недоступными?
Тем не менее, можно написать немного кода.NET, который вы могли бы периодически запускать для установки статуса агента сборки. В качестве альтернативы вы можете запустить его как запланированную задачу после запуска на компьютере с Windows, который работает в качестве агента сборки, чтобы поговорить с TFS и вернуть ему статус "хороший".
Чтобы написать код, вы хотите использовать API сборки TFS (Microsoft.TeamFoundation.Build.Client). В частности, вы хотите посмотреть на IBuildAgent. Получите соответствующий из IBuildServer, измените статус и затем вызовите buildAgent.Save().