Я работаю над автоматизацией конвейера выпуска с помощью Azure DevOps и приложения логики. Цель — запустить конвейер выпуска из приложения логики при получении HTTP-запроса, а затем получить выходные данные переменной среды из конвейера Azure DevOps, чтобы использовать их на следующем этапе приложения логики.
Ниже приводится краткое изложение того, чего я пытаюсь достичь, и проблем, с которыми я сталкиваюсь:
Шаги:
Запуск конвейера выпуска: используйте приложение логики, чтобы запустить конвейер выпуска Azure DevOps.
Получить переменную среды: извлеките выходные данные определенной переменной среды из конвейера Azure DevOps.
Использовать переменную среды в приложении логики. Используйте полученную переменную среды на следующем этапе приложения логики.
Я столкнулся с парой проблем, которые не могу решить:
Бесконечный цикл с задержкой: я добавил задержку для ожидания успешного завершения этапа конвейера, но это приводит к бесконечному циклу.
Проблема с анализом JSON: я пытался получить выходные переменные среды конвейера, используя этап анализа JSON, но он не работает должным образом.
да, это конвейер yaml, я хочу получить вывод записи "##vso[task.setvariablevariable=Data;]Data" из конвейера и использовать его в приложении логики
Ниже дизайн работал у меня:
затем:
затем:
Здесь я взял Result в Compose, чтобы получить результат конвейера сборки, взял его, а затем использовал Parse Json, чтобы узнать, какой тип вывода/результата он дает, а затем использовать соответствующую схему в соответствии с ним.
Выход:
Проблема не в дизайне, мне он помог.
Выходная переменная , установленная с помощью команды регистрации, доступна только для следующих задач во время выполнения. Вы не можете получить его через REST API, поэтому вы не можете получить его в действии Parse JSON.
В качестве обходного пути вы можете создать группу переменных в Azure DevOps и использовать ее для хранения целевой переменной. Подробные инструкции см. ниже.
Data
.
Data
значением выходной переменной.steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: 'Write-Output "##vso[task.setvariable variable=Data;]Test"'
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$header = @{'Authorization' = 'Bearer ' + "$(System.AccessToken)"}
$url = "https://dev.azure.com/{Org Name}/_apis/distributedtask/variablegroups/{Variable Group Id}?api-version=7.1-preview.2"
$body = @'
{
"variables": {
"Data": {
"value": "$(Data)"
}
},
"name": "LogicApp",
"variableGroupProjectReferences": [
{
"projectReference": {
"id": "$(System.TeamProjectId)",
"name": "$(System.TeamProject)"
},
"name": "LogicApp",
}
]
}
'@
Invoke-RestMethod -Uri $url -Method PUT -Headers $header -Body $body -ContentType application/json
$token = "{Your PAT}"
$newtoken = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
Write-Host $newtoken
Создайте параметр в своем приложении Logic и добавьте полученный newtoken
.
Добавьте действие HTTP после действия «Задержка» и вызовите REST API Группы переменных — получите, чтобы получить значение переменной.
https://dev.azure.com/{OrgName}/{ProjectName}/_apis/distributedtask/variablegroups/{VariableGroupId}?api-version=7.1-preview.2
GET
Затем вы сможете увидеть переменную в теле ответа действия HTTP, а также получить переменную и использовать ее в следующих действиях.
Спасибо за решение, можем ли мы вместо задержки добавить HTTP-запрос или ответ, чтобы знать, успешна ли сборка или нет.
Мы можем использовать REST API Сборки — Получить, чтобы проверить результат сборки. Но если вы не используете задержку, вам необходимо гарантировать, что только когда результат сборки будет succeeded
, может быть запущена следующая переменная, потребляющая действие.
Какую переменную среды вы хотите получить в конвейере. Вы используете классический конвейер выпуска или конвейер yaml?