Я работаю над удалением агента из пула временно, устанавливаю новое программное обеспечение на сервере сборки, на котором работает агент, проверяет, что он работает, а затем снова добавляет агента в пул. Я хотел бы сделать это программно, либо с помощью powershell, либо если это не возможно, тогда сделайте это с C#.TFS 2015 api удалить агент из пула с powershell
Проблема в том, что я не могу найти документацию, которая может помочь мне в этом, либо через TFS rest api, либо через инструменты, которые поставляются с визуальной студией.
Так что я конкретно спрашиваю: Как удалить именованный агент из пула сборки и Как добавить именованный агент обратно в пул сборки.
То, что я в основном хочу, это те же функции, что и в веб-администрировании TFS и снятие/проверка агента в пуле.
Edit ->
При попытке включить/отключить агента с информацией, предоставленной starain-MSFT, я получаю следующее сообщение об ошибке: Invoke-RestMethod: 404 - файл или каталог не найден. Ошибка сервера
Edit->
Убрана большая часть ошибок, как я выяснил, что проблема лежит в моих Компаниса прокси Читайте здесь: https://www.visualstudio.com/en-us/docs/integrate/get-started/rest/basics#http-method-override
Но я получил его на работу с помощью starain-MSFT.
Окончательное решение выглядит следующим образом:
Function TFSwebRequest{
param
(
[ValidateNotNullOrEmpty()]
[Parameter(Mandatory=$true)]
[string] $Uri,
[ValidateNotNullOrEmpty()]
[Parameter(Mandatory=$true)]
[string] $Method,
[ValidateNotNullOrEmpty()]
[string] $ContentType,
[ValidateNotNullOrEmpty()]
[string] $ContentBody,
[ValidateNotNullOrEmpty()]
[System.Net.WebHeaderCollection] $Headers
)
# Creating Webrequest from Uri
$webRequest = [System.Net.HttpWebRequest]::CreateHttp($Uri)
$webRequest.UseDefaultCredentials = $true
$webRequest.Method = $Method
if($Headers.Count -ne 0){
$webRequest.Headers = $Headers
}
if(![string]::IsNullOrEmpty($ContentType)){
$webRequest.ContentType = $ContentType
}
if(![string]::IsNullOrEmpty($ContentBody)){
$Body = [byte[]][char[]]$ContentBody
$Stream = $webRequest.GetRequestStream();
$Stream.Write($Body, 0, $Body.Length);
}
# Get webresponse to variable
try{
[System.Net.WebResponse]$webResponse = $webRequest.GetResponse()
}
catch{
$ErrorMessage = $_.Exception.Message
Write-Host "TFSwebRequest Failed = " $ErrorMessage -ForegroundColor Red
}
# Stream webresponse to string
$webResponseStream = $webResponse.GetResponseStream()
$streamReader = New-Object System.IO.StreamReader $webResponseStream
$result = $streamReader.ReadToEnd() | ConvertFrom-Json
return ,$result
}
$agentUri = "http://teamfoundation:8080/tfs/Main/_apis/distributedtask/pools/$($poolID)/agents/$($agentID)?api-version=2.3-preview.1"
$contentBody = @"
{
"maxParallelism": 1,
"id": INSERTID,
"enabled": true #Or false
}
"@
$headers = New-Object System.Net.WebHeaderCollection
$headers.Add("X-HTTP-Method-Override", "PATCH")
TFSwebRequest -Uri $agentUri -Method "POST" -Headers $headers -ContentType "application/json" -ContentBody $contentBody
Работает ли ваш агент сборки как служба или запускается в интерактивном режиме? –
Я добавил код powershell и отключил/разрешил агент REST API REST для моего ответа, вы можете его проверить. –
Вы решаете эту проблему с моим решением? –