Агент сборки Azure DevOps не имеет маркеров доступа в своем кэше токенов - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь вызвать rest api из агента сборки Azure DevOps. Для этого мне нужен токен, который я могу получить на своем локальном компьютере:

$accessToken = ((Get-AzContext).TokenCache.ReadItems() | Where { $_.TenantId -eq (Get-AzContext).Tenant } | Sort-Object -Property ExpiresOn -Descending)[0].AccessToken

Однако на агенте сборки это никогда не возвращает никаких токенов. Есть ли какой-то другой способ, которым я должен попытаться получить этот токен?

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Включили ли вы параметр «Разрешить сценариям доступ к токену OAuth» в настройках Агентов?

enter image description here

Это будет для сборок и выпусковс использованием визуального конструктора.

Для сборок YAML см. документация с предопределенными переменными . В скрипте есть примечания по использованию переменной «System.AccessToken». По сути, вы должны явно отобразить System.AccessToken в конвейер, используя переменную. Вы можете сделать это на уровне шага или задачи:

steps:
  - bash: echo This is a script that could use $SYSTEM_ACCESSTOKEN
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  - powershell: Write-Host "This is a script that could use $env:SYSTEM_ACCESSTOKEN"
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)
0 голосов
/ 21 октября 2019

Спасибо за предложения и идеи. Ответ был слишком прост, чтобы понять это. Я разорвал большую часть oneliner, и теперь он работает только с помощью:

$accessToken = ((Get-AzContext).TokenCache.ReadItems()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...