Как передать параметры конвейеру сборки azure Dev ops извне для управления выполнением задач?

мой запрос: как передать параметры конвейеру сборки azure Dev ops извне, чтобы контролировать выполнение задач? Чтобы объяснить подробно, вот объяснение:

У меня есть проект в Azure Dev ops, у которого есть конвейер сборки, настроенный с некоторыми сериями задач, включающих сборку решения, создание развертываемого пакета и т. Д. Обычно это выполняется хорошо и хорошо без каких-либо проблем.

Я хочу объявить переменную конвейера в этом определении сборки проекта, к которой я могу получить доступ извне, когда я скажу, что это что-то вроде совершенно другого или внешнего приложения, такого как поток ms, чтобы я мог передать значение вновь созданной переменной конвейера как указано выше, и используя это значение, хранящееся в этой новой переменной, я должен иметь возможность пропустить несколько шагов в конвейере сборки, а я должен иметь возможность выполнить только несколько шагов.

Поясню на примере:

  1. Рассмотрим проект под названием A в azure Dev ops, в котором конвейер сборки настроен для выполнения 5 различных задач.
  2. Предположим, в том же конвейере сборки создана новая переменная конвейера с именем flag.
  3. Рассмотрим внешнее приложение, такое как поток ms, которое запускает конвейер сборки проекта A на шаге 1.
  4. Я должен иметь возможность передать значение переменной flag, созданной на шаге 2, используя поток на третьем шаге, например true или false.
  5. Используя значение флага, переданное конвейеру сборки из потока ms, задачи в конвейере сборки должны быть выполнены, т.е. если значение, поступающее через внешнее приложение в конвейер сборки, истинно, тогда оно должно выполнить только 3, 4 задачи в конвейере сборки и пропустить другие со значением false должны выполнять все шаги конвейера сборки в Azure Dev ops.

Вопрос в том, как добиться или заставить такое поведение происходить?

Пожалуйста, помогите мне в решении этой проблемы?

Если передача значения переменной невозможна, не могли бы вы сообщить мне, как добиться поведения пропуска в конвейере сборки azure Dev ops, запускаемом из внешнего приложения, такого как поток ms?


person Chaitanya N G    schedule 26.09.2019    source источник


Ответы (2)


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

Param(
       [string]$collectionurl = "https://dev.azure.com/{orgname}",
       [string]$project = "{projectname}",
       [string]$user = "{useraccount}",
       [string]$token = "{yourPAT}"
)

$base64AuthInfo= [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $token)))

$defurl = "$collectionurl/$project/_apis/build/builds?api-version=5.0"
$json = '{"parameters":  "{\"AnotherParameter\":  \"true\"}","definition":  {"id":  "{definitionId}"}}'
$updatedef = Invoke-RestMethod -Uri $defurl -Method Post -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

Вы можете создать три конвейера сборки. Первый конвейер - это ваш основной конвейер, который имеет 5 различных задач. Вы можете установить пользовательское условие, как показано ниже. Это означает, что только тогда, когда значение AnotherParameter истинно, задача будет запущена.

введите здесь описание изображения

Второй конвейер и третий конвейер - это запускающий конвейер. Во втором конвейере вы можете использовать сценарий PowerShell, чтобы установить для параметра AnotherParameter значение false, а в третьем конвейере установить значение как true.

Затем установите второй конвейер, запускаемый внешним приложением, а третий конвейер запускается вашим репо или другими.

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

Когда третий конвейер запускается вашей фиксацией, значение AnotherParameter будет истинным, и все задачи в первом конвейере будут выполняться, как ожидалось.

person Frank Wang-MSFT    schedule 30.09.2019
comment
Спасибо за ваш вклад и время. Мне удалось продолжить работу без каких-либо проблем, большое спасибо. Решение разблокировало меня. - person Chaitanya N G; 01.10.2019

Вы можете вызвать REST API Azure DevOps и передать параметры в запросе. Взгляните на этот пост для получения дополнительной информации: Начать сборка и передача переменных через VSTS Rest API

Если вы хотите добавить условие к задаче или конвейеру сборки, ознакомьтесь с документацией по условиям: Условия - Azure Pipelines

person point    schedule 26.09.2019