构建代理仅在特定持续时间内可用

时间:2017-01-06 12:31:53

标签: build teamcity agents

有三个构建代理可以运行我的TC配置。我希望这些代理中只有一个在白天运行构建,因此另外两个系统可用于手动测试。在6Pm之前,由于这些不会用于手动测试,我希望团队城市构建在所有三个系统上运行。我有什么想法可以做到吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

使用池系统:

您的游泳池中有代理商"可用的代理商"对你的项目有影响。

在下午6点,使用teamcity构建配置,您可以执行自定义脚本,这将影响您的计算机到池"使用代理"。

在早上6点,另一个脚本会将此代理影响到另一个池:"不可用的代理",它不受任何配置的影响。

以下是teamcity资源:https://confluence.jetbrains.com/display/TCD10/REST+API#RESTAPI-AgentPools

实现的基础是,在powershell中:

在这种情况下,AgentId是您要移动的代理的ID。 而PoolId是目标池标识符。

您可以在此网址上获取池的ID: http://teamcityURL/app/rest/agentPools/ 您可以在此URL上获取代理的ID: http://teamcityURL/app/rest/agents

func unsmartMethod(v interface{}) bool{
    switch v.(type){
    case objectOne:
        if v == (objectOne{}) {
          return true
        }
        // and next object, and next....
    }
    return false
}

您当前的用户需要具有以下角色:# # 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 }

在我的情况下,考虑像:

这样的游泳池
|  Id  | Pool            | 
|   1  | Usage agents    |
|   2  | Unusable agents |
|  Id  | Agent            | 
|   1  | AllDay           |
|   2  | Nightly1         |
|   3  | Nightly2         |

下午6点执行:

运行Powershell配置:AgentToPool.ps1 使用参数Manage agent pools

运行Powershell配置:AgentToPool.ps1 使用参数-AgentId:2 -PoolId:1

早上6点执行:

运行Powershell配置:AgentToPool.ps1 使用参数-AgentId:3 -PoolId:1

运行Powershell配置:AgentToPool.ps1 使用参数-AgentId:2 -PoolId:2