Я пытаюсь получить статус агентов в пуле развертывания во время выпуска. Вариант использования: у меня 2 сервера с общим диском, я хочу, чтобы релиз работал только на одном сервере. У меня есть две группы развертывания, которые запускаются на основе настраиваемого условия:
eq(variables['DeployGroupSelector'], '1')
С заданием, которое выполняется до тех, которые будут определять значение DeployGroupSelector var, по сути, оператор case.
В задании, которое устанавливает var, я пытаюсь обратиться к API REST AzOUR DevOps:
$headers = @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
$url = "https://dev.azure.com/$($organization)/_apis/distributedtask/pools/$($poolId)/agents?api-version=5.1"
$response = Invoke-RestMethod $url -Headers $headers -Verbose
write-host "Output: $response"
$status = ($response.value | where {$_.name -eq $($env:primaryPoolName)}).status
if($status -eq "online")
{
Write-Output("##vso[task.setvariable variable=DeployGroupSelector;]1")
}
else
{
Write-Output("##vso[task.setvariable variable=DeployGroupSelector;]2")
}
Для группы, содержащей скрипт над полем «Разрешить доступ скриптов к токену OAuth»проверено.
Когда я запускаю этот PowerShell локально, используя PAT, он возвращает данные. Когда я запускаю релиз в ADO, он попадает в службу, но возвращает пустой набор данных:
2019-10-07T14:16:18.8942915Z VERBOSE: GET https://dev.azure.com/xxxxxx/_apis/distributedtask/pools/13/agents?api-version=5.1 with 0-byte payload
2019-10-07T14:16:19.3235204Z VERBOSE: received 22-byte response of content type application/json
2019-10-07T14:16:19.9626359Z VERBOSE: Content encoding: utf-8
2019-10-07T14:16:19.9835101Z Output: @{count=0; value=System.Object[]}
Я попытался дать группе «Учетные записи службы сборки Project Project» доступ на чтение к пулам и группам. даже пытался натолкнуть его на пользователя. Я попытался добавить группу учетных записей службы сборки, чтобы освободить администраторов. Я даже попробовал использовать старый формат URL на всякий случай.
Добавлена картинка данных, возвращаемых powershell:
![enter image description here](https://i.stack.imgur.com/m8d21.png)
ОБНОВЛЕНИЕ: Просточтобы в дальнейшем исключить проблему с использованием токена, я добавил в задачу задачу вторую задачу powershell. Этот скрипт попадает в другой сегмент API AzDO Rest (ниже). Это успешно получает ответ. Итак, токен OAuth работает, у него просто нет доступа ко всему API.
$ headers = @ {Authorization = "Bearer $ env: SYSTEM_ACCESSTOKEN"}
$url = "https://dev.azure.com/$($organization)/$($project)/_apis/git/repositories?api-version=5.1"
$response = Invoke-RestMethod $url -Headers $headers -Verbose
write-host "Output: $($response)"
Ответ: Output: @{value=System.Object[]; count=10}