Запускайте этап выпуска Azure DevOps только в том случае, если существует определенный артефакт

#azure-devops

#azure-devops

Вопрос:

В Azure DevOps у меня есть один конвейер сборки, который работает и может создать 1 или 2 артефакта, которые я хочу выпустить. Давайте назовем их Artifact1 и Artifact2.

Возможно ли иметь один конвейер выпуска с несколькими этапами, которые запускаются только в том случае, если существует определенный артефакт? Поэтому, если был создан Artifact1, запустите этап Artifact1Stage, но не Artifact2Stage.

Я вижу, что в DevOps есть фильтры ветвей, но это не дает мне того, чего я хочу. Я хочу отфильтровать созданный артефакт.

В задании группы развертывания (на этапе) есть опция загрузки артефакта, которая позволяет мне выбрать конкретный артефакт, который я хочу, но это не предотвращает запуск этапа (а затем сбой, если конкретный артефакт не был создан).

ИЗМЕНИТЬ: Если это имеет значение, я не использую синтаксис yaml для конвейера выпуска.

Ответ №1:

Я бы сделал что-то вроде следующего (предполагая, что это классический конвейер, как вы предложили):

  1. Добавьте задачу Powershell, сценарий которой проверяет содержимое $(System.DefaultWorkingDirectory) (включая любую подпапку, содержащую ваш артефакт), а затем использует Write-Host "##vso[task.setvariable variable=whichArtifact;isoutput=true]some value that tells you if it's artifact 1 or 2 that's present"
  2. Создайте 2 задания за один этап, по одному для каждого артефакта (или два этапа с одним заданием на каждом, ваш вызов). Для Run on agent дополнительной опции задания Run this Job выберите Custom condition using variable expressions , и значение будет примерно таким eq(variables['whichArtifact'], 'value that tells you which artifact this is')

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