API TFS 2015 удаляет агент из пула с powershell
Я временно работаю над удалением агента из пула, устанавливаю новое программное обеспечение на сервер сборки, на котором включен агент, проверяю его работоспособность, а затем снова добавляю агент в пул. Я хотел бы сделать это программно, либо с powershell, либо, если это невозможно, то сделайте это с помощью C#.
Проблема в том, что я не могу найти какую-либо документацию, которая могла бы помочь мне сделать это, либо через TFS rest api, либо через инструменты, поставляемые с Visual Studio.
Итак, что я конкретно спрашиваю: как удалить именованный агент из пула сборки и как добавить именованный агент обратно в пул сборки.
В принципе, мне нужна та же функциональность, что и переход к веб-администрированию TFS и снятие отметки / проверки агента в пуле.
Edit->
Когда я пытаюсь включить / отключить агент с информацией, предоставленной starain-msft, я получаю следующую ошибку: Invoke-RestMethod: 404 - Файл или каталог не найден. Ошибка сервера
Edit->
Устранена большая часть ошибки, так как я обнаружил, что проблема заключается в моем прокси-сервере. Прочитайте здесь: https://www.visualstudio.com/en-us/docs/integrate/get-started/rest/basics
Но я заставил его работать с помощью 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
2 ответа
API остальных пула агентов и агента:
Получить пулы агентов (Метод запроса: Получить):
http://[TFS URL]/_apis/distributedtask/pools?api-version=2.3-preview.1
Получить агентов пула агентов (Метод запроса: Получить):
http://[TFS URL]/_apis/distributedtask/pools/[pool id]/agents?api-version=2.3-preview.1
Отключить / включить агент сборки (Метод запроса: PATCH)
http://[TFS URL]/_apis/distributedtask/pools/[pool id]/agents/[agent id]?api-version=2.3-preview.1
Тело (Content-Type: application/json)
{
"enabled":false,
"id":[agent id],
"maxParallelism":1
}
Удалить агента из пула агентов (Метод запроса: Удалить):
http://[Tfs URL]/_apis/distributedtask/pools/[pool id]/agents/[agent id]?api-version=2.3-preview.1
Простой пример вызова REST API (PowerShell):
Param(
[string]$vstsAccount = "<VSTS-ACCOUNT-NAME>",
[string]$projectName = "<PROJECT-NAME>",
[string]$buildNumber = "<BUILD-NUMBER>",
[string]$keepForever = "true",
[string]$user = "",
[string]$token = "<PERSONAL-ACCESS-TOKEN>"
)
# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$uri = "https://$($vstsAccount).visualstudio.com/DefaultCollection/$($projectName)/_apis/build/builds?api-version=2.0&buildNumber=$($buildNumber)"
$result = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
Подробнее: вызов API-интерфейсов VSTS с помощью PowerShell
Код C# для вызова REST API:
String MyURI = "REST API URL";
WebRequest WReq = WebRequest.Create(MyURI);
WReq.Credentials =
new NetworkCredential("[user name]", "[password]", "[domain]");
WebResponse response = WReq.GetResponse();
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
С другой стороны, вам нужно перезапустить агент сборки после установки нового программного обеспечения на машину агента, чтобы распознать их.
Нет такого API для создания или удаления агента из пула агентов. И не нужно писать свой собственный скрипт, когда вы загружаете агент, вам просто нужно запустить командную строку от имени администратора, а затем запустить ConfigureAgent.cmd
на вашем компьютере агента сборки:
C:\Agent\ConfigureAgent.cmd
Затем ответьте на подсказки. Проверьте https://www.visualstudio.com/en-us/docs/build/admin/agents/v1-windows