DevOps Azure получают статус агента развертывания во время выпуска - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь получить статус агентов в пуле развертывания во время выпуска. Вариант использования: у меня 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

ОБНОВЛЕНИЕ: Просточтобы в дальнейшем исключить проблему с использованием токена, я добавил в задачу задачу вторую задачу 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}

1 Ответ

0 голосов
/ 07 октября 2019

Поскольку вы используете переменную System_AccessToken, вы также включили флажок «Разрешить сценариям доступ к токену OAuth» в задании агента? https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=classic#systemaccesstoken Эта ссылка показывает, где она находится в сборке, но вы найдете ее в нижней части панели «Задание агента» в выпуске. Если это не проверено, возможно, поэтому вы получаете пустой ответ.

enter image description here

...