2017-01-06 2 views
1

Es gibt drei Build Agents, die meine TC-Konfiguration ausführen können. Ich möchte, dass nur 1 dieser Agenten die Builds tagsüber ausführt, sodass die anderen beiden Systeme für manuelle Tests verwendet werden können. Nach 6 Uhr morgens, da diese nicht für manuelle Tests verwendet werden, möchte ich Team City Builds auf allen drei Systemen laufen lassen. Irgendwelche Ideen, wie ich das machen kann?Erstellungsagent nur während einer bestimmten Zeitdauer verfügbar

Vielen Dank im Voraus.

Antwort

1

Mit dem Pool-System:

Sie haben einen Agenten in Ihrem Pool "benutzbar Agenten" zu einem Projekt betroffen.

Um 18:00 Uhr können Sie mit einer teamcity-Build-Konfiguration ein benutzerdefiniertes Skript ausführen, das Ihre Maschinen auf die "Nutzungsagenten" des Pools auswirkt.

Um 6 Uhr wirkt sich ein anderes Skript auf diese Agenten auf einen anderen Pool aus: "unbrauchbarer Agent", der von keiner Konfiguration betroffen ist.

Hier ist die Teamcity Ressource: https://confluence.jetbrains.com/display/TCD10/REST+API#RESTAPI-AgentPools

Eine Basis Implementierung wäre, in Powershell:

In diesem Fall ist AgentID die ID des Agenten Ihrer verschieben möchten. Und PoolId ist die Zielpool-ID.

Sie können die IDs Ihres Pools auf dieser URL erhalten: http://teamcityURL/app/rest/agentPools/ Sie können die IDs Ihrer Agenten auf dieser URL erhalten: http://teamcityURL/app/rest/agents

# 
# AgentToPool.ps1 
# 
Param(
    [Parameter(Mandatory=$true)][string]$AgentId = "0", 
    [Parameter(Mandatory=$true)][string]$PoolId = "0" 
) 
Begin { 
    $username = "guest" 
    $password = "guest" 
    $serverURL = "http://teamcityURL/" 

    function Execute-HTTPPostCommand() { 
      param(
       [string] $target = $null, 
       [string] $data = "" 
      ) 

     $PostStr = [System.Text.Encoding]::UTF8.GetBytes($data) 
     $request = [System.Net.WebRequest]::Create($target) 

     $request.PreAuthenticate = $true 
     $request.Method = "POST" 
     $request.ContentLength = $PostStr.Length 
     $request.ContentType = "application/xml" 
     $request.Headers.Add("AUTHORIZATION", "Basic"); 
     $request.Accept = "*" 
     $request.Credentials = New-Object System.Net.NetworkCredential($username, $password) 

     $requestStream = $request.GetRequestStream() 
     $requestStream.Write($PostStr, 0,$PostStr.length) 
     $requestStream.Close() 

     $response = $request.GetResponse() 
     $xmlout = "" 

     if($response) 
     { 
      $sr = [Io.StreamReader]($response.GetResponseStream()) 
      $xmlout = $sr.ReadToEnd() 
     } 
     return $xmlout; 
    } 

    $data = "<agent id='$AgentId'/>" 
    Execute-HTTPPostCommand $serverURL/app/rest/agentPools/id:$PoolId/agents $data 
} 

Ihre aktuelle Benutzer muss die Rolle haben: Manage agent pools

In meinem Fall, wenn man bedenkt Pools wie:

 
| Id | Pool   | 
| 1 | Usage agents | 
| 2 | Unusable agents | 
 
| Id | Agent   | 
| 1 | AllDay   | 
| 2 | Nightly1   | 
| 3 | Nightly2   | 

bei 06.00 Executing:

Powershell-Konfiguration: AgentToPool.ps1 Mit den Parametern -AgentId:2 -PoolId:1

Powershell-Konfiguration läuft: AgentToPool.ps1 Mit den Parametern -AgentId:3 -PoolId:1

bei 06.00 Executing:

Powershell-Konfiguration wird ausgeführt: AgentToPool.ps1 Wit h Parameter -AgentId:2 -PoolId:2

Powershell-Konfiguration läuft: AgentToPool.ps1 Mit den Parametern -AgentId:3 -PoolId:2

+0

ich versucht wurde für eine einfachere Lösung zu suchen. Ich bin kein Power Shell Experte. Werde es jetzt versuchen. – user1220815

Verwandte Themen