2009-06-30 4 views
3

Nous avons un déploiement Team Foundation Server (2008) central où tous les projets sont stockés. Chaque projet configure son propre serveur de génération exécutant Team Build pour faire ses propres constructions automatisées.Team Build - Agent de réouverture automatique après être devenu inaccessible

Voici le problème. Lorsqu'une erreur de connexion est détectée entre TFS et le serveur Team Build, l'état de l'agent de construction devient «inaccessible», ce qui signifie qu'il n'est pas disponible pour les versions ultérieures. Nos serveurs ont programmé des fenêtres de redémarrage et lorsque TFS ne peut pas communiquer avec ces agents (ou vice-versa) pendant cette fenêtre, il déplace l'agent vers 'inaccessible'. Chaque matin, nous arrivons et constatons que nous devons entrer manuellement et réactiver l'agent.

Est-il possible que les agents de consolidation d'équipe reviennent en ligne dès qu'ils sont de nouveau disponibles? Ou peut-être écrire un script qui les ramène automatiquement en ligne?

Répondre

1

J'ai également vu ce problème moi-même - Voici un script Powershell qui va itérer tous les agents de construction sur tous les projets d'équipe et les activer. Notez que les agents seront mis à jour pour permettre immédiatement, peu importe si elles sont valides (si le serveur de build est toujours vers le bas lorsque le script est exécuté - dès qu'une accumulation déclenche - il revenir à Inaccessible)

$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() 
     } 
    } 
} 
2

Dans AT TFS2008, l'AT doit envoyer une requête ping à l'agent de construction inaccessible sur une période régulière (15-30 minutes, je ne me souviens pas de l'intervalle pour le moment) pour voir s'il est de retour. Ne voyez-vous pas ce comportement - le vôtre reste-t-il inaccessible? Cela dit, il est possible d'écrire un peu de code .NET que vous pourriez exécuter périodiquement pour définir l'état de l'agent de construction. Vous pouvez également l'exécuter en tant que tâche planifiée après le démarrage sur la machine Windows qui est en cours d'exécution en tant qu'agent de construction pour aller parler à TFS et rétablir son état.

Pour écrire le code, vous souhaitez utiliser l'API TFS Build (Microsoft.TeamFoundation.Build.Client). En particulier, vous voulez regarder le IBuildAgent. Obtenez le approprié à partir du IBuildServer, changez le statut, puis appelez buildAgent.Save().

+0

Non , le nôtre ne montre pas ce comportement, il restera juste inaccessible jusqu'à ce que quelqu'un entre manuellement et change le statut. C'est une excellente information cependant, je n'étais pas au courant que la capacité existait dans l'API de construction de TFS - c'est ce que je ferai. –

Questions connexes