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