Аутентификация задачи PowerShell для конвейеров Azure с помощью Azure DevOps Rest API - PullRequest
0 голосов
/ 15 февраля 2019

Требования

Мое требование состоит в том, чтобы для моего конвейера выпуска devure в Azure я хотел пометить определенный коммит аннотированным тегом, который содержит номер сборки и дату (которая автоматически устанавливается для аннотированного тега).

Предлагаемое решение

Мое решение для этого - использовать конвейерную задачу Azure Powershell, показанную здесь: enter image description here

Задача (не обращайте внимания на то, что сейчас находится в окне скрипта) будет использовать подписку Azure, которую я установил для аутентификации в API REST Azure DevOps.Я успешно смог выполнить задачу, которую хочу, используя личный токен доступа (PAT), но это нестабильно для всей команды, и я хочу использовать нашу подписку Azure.

Проблема

Моя проблема в том, что я не уверен, как правильно использовать аутентификацию подписки Azure.Кажется, я получаю некоторые данные, используя Get-AzureRmContext (см. Текущий код ниже), а затем обнаружил проблему GitHub, которая, кажется, делает то же самое .Код получает какой-то токен OAuth, но, используя приведенный ниже код, Azure все равно возвращает мне сообщение о том, что мне нужно войти в систему, поэтому я предполагаю, что это неправильный токен.Я не понимаю, как вещи появляются друг на друга.

Обратите внимание, что моя подписка должна иметь все разрешения, необходимые для выполнения того, что я хочу.

Код на данный момент:

Function Get-AccessToken($tenantId) {
    $cache = [Microsoft.IdentityModel.Clients.ActiveDirectory.TokenCache]::DefaultShared
    $cacheItem = $cache.ReadItems() | Where-Object { $_.TenantId -eq $tenantId } | Select-Object -First 1
    return $cacheItem.AccessToken
}

$context = Get-AzureRmContext
$uri = "https://dev.azure.com/<my_org>/<my_area>/_apis/git/repositories/<project_sha>/annotatedtags?api-version=5.0-preview.1"
$token = Get-AccessToken $context.tenantID

$body = @"
{
    "taggedObject": {
        "objectId": "$(BUILD.SOURCEVERSION)"
    },
    "name": "D-$(Build.BuildNumber)",
    "message": "dummy"
}
"@
$header = @{"Authorization" = "Bearer" + $token}

Invoke-RestMethod -Uri $uri -Method Post -ContentType "application/json" -Body $body -Headers $header

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 17 февраля 2019

Вот пример для задач сборки: Использование сценария PowerShell для настройки конвейера сборки

  1. Необходимо включить доступ к токену (опция Разрешить сценарии)для доступа к OAuth-токену )

enter image description here

Тогда используйте это в своем сценарии.Скрипт из примера:

$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=5.0"

Write-Host "URL: $url" $pipeline = Invoke-RestMethod -Uri $url -Headers @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }

Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...