Запуск конвейера выпуска Azure DevOps из приложения логики и получение выходных данных переменной среды из конвейера

Я работаю над автоматизацией конвейера выпуска с помощью Azure DevOps и приложения логики. Цель — запустить конвейер выпуска из приложения логики при получении HTTP-запроса, а затем получить выходные данные переменной среды из конвейера Azure DevOps, чтобы использовать их на следующем этапе приложения логики.

Ниже приводится краткое изложение того, чего я пытаюсь достичь, и проблем, с которыми я сталкиваюсь:

Шаги:

  1. Запуск конвейера выпуска: используйте приложение логики, чтобы запустить конвейер выпуска Azure DevOps.

  2. Получить переменную среды: извлеките выходные данные определенной переменной среды из конвейера Azure DevOps.

  3. Использовать переменную среды в приложении логики. Используйте полученную переменную среды на следующем этапе приложения логики.

Приложение Logic

Я столкнулся с парой проблем, которые не могу решить:

  1. Бесконечный цикл с задержкой: я добавил задержку для ожидания успешного завершения этапа конвейера, но это приводит к бесконечному циклу.

  2. Проблема с анализом JSON: я пытался получить выходные переменные среды конвейера, используя этап анализа JSON, но он не работает должным образом.

Какую переменную среды вы хотите получить в конвейере. Вы используете классический конвейер выпуска или конвейер yaml?

Ziyang Liu-MSFT 24.06.2024 10:39

да, это конвейер yaml, я хочу получить вывод записи "##vso[task.setvariablevariable=Data;]Data" из конвейера и использовать его в приложении логики

denim 24.06.2024 11:28
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
2
110
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ниже дизайн работал у меня:

затем:

затем:

Здесь я взял Result в Compose, чтобы получить результат конвейера сборки, взял его, а затем использовал Parse Json, чтобы узнать, какой тип вывода/результата он дает, а затем использовать соответствующую схему в соответствии с ним.

Выход:

Проблема не в дизайне, мне он помог.

Ответ принят как подходящий

Выходная переменная , установленная с помощью команды регистрации, доступна только для следующих задач во время выполнения. Вы не можете получить его через REST API, поэтому вы не можете получить его в действии Parse JSON.

В качестве обходного пути вы можете создать группу переменных в Azure DevOps и использовать ее для хранения целевой переменной. Подробные инструкции см. ниже.

  1. Создайте группу переменных в Azure DevOps и добавьте переменную с именем Data.
  2. Вызовите REST API Группы переменных. Обновите в своем конвейере и обновите значение 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

  1. Создайте PAT как минимум с областью групп переменных (чтение). Запустите следующие сценарии PowerShell локально, чтобы получить строку base64 PAT.
$token = "{Your PAT}"
$newtoken = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
Write-Host $newtoken
  1. Создайте параметр в своем приложении Logic и добавьте полученный newtoken.

  2. Добавьте действие HTTP после действия «Задержка» и вызовите REST API Группы переменных — получите, чтобы получить значение переменной.

    • УРИ: https://dev.azure.com/{OrgName}/{ProjectName}/_apis/distributedtask/variablegroups/{VariableGroupId}?api-version=7.1-preview.2
    • Метод: GET
    • Добавьте заголовок: «Авторизация»: «Basic @{parameters('PAT')}»

  3. Затем вы сможете увидеть переменную в теле ответа действия HTTP, а также получить переменную и использовать ее в следующих действиях.

Спасибо за решение, можем ли мы вместо задержки добавить HTTP-запрос или ответ, чтобы знать, успешна ли сборка или нет.

denim 25.06.2024 13:14

Мы можем использовать REST API Сборки — Получить, чтобы проверить результат сборки. Но если вы не используете задержку, вам необходимо гарантировать, что только когда результат сборки будет succeeded, может быть запущена следующая переменная, потребляющая действие.

Ziyang Liu-MSFT 26.06.2024 05:30

Другие вопросы по теме