Я работаю над временным удалением агента из пула, устанавливаю новое программное обеспечение на сервер сборки, на котором находится агент, проверяю, работает ли он, а затем снова добавляю агент в пул.
Я хотел бы сделать это программно, либо с помощью PowerShell, либо, если это невозможно, сделать это с помощью С#.
Проблема в том, что я не могу найти никакой документации, которая могла бы помочь мне в этом, ни с помощью API REST TFS, ни с помощью инструментов, поставляемых с Visual Studio.
Поэтому я специально спрашиваю:
Как удалить именованный агент из пула сборки и как добавить именованный агент обратно в пул сборки?
В основном мне нужна та же функциональность, что и для веб-администрирования TFS и снятия / проверки агента в пуле.
Когда я пытаюсь включить/отключить агент с помощью информации, предоставленной starain-msft, я получаю следующую ошибку:
Invoke-RestMethod :
404 - File or directory not found.
Server Error
Позже я устранил большую часть ошибки, так как обнаружил, что проблема связана с прокси моей компании. Читайте здесь: Справочник по API REST Azure DevOps Services
Но я заставил его работать с помощью 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 a variable
try {
[System.Net.WebResponse]$webResponse = $webRequest.GetResponse()
}
catch {
$ErrorMessage = $_.Exception.Message
Write-Host "TFSwebRequest Failed = " $ErrorMessage -ForegroundColor Red
}
# Stream webresponse to a 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