Требования
Мое требование состоит в том, чтобы для моего конвейера выпуска devure в Azure я хотел пометить определенный коммит аннотированным тегом, который содержит номер сборки и дату (которая автоматически устанавливается для аннотированного тега).
Предлагаемое решение
Мое решение для этого - использовать конвейерную задачу Azure Powershell, показанную здесь:
Задача (не обращайте внимания на то, что сейчас находится в окне скрипта) будет использовать подписку 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
Любая помощь очень ценится!