#azure-devops
#azure-devops
Вопрос:
В Azure DevOps у меня есть один конвейер сборки, который работает и может создать 1 или 2 артефакта, которые я хочу выпустить. Давайте назовем их Artifact1 и Artifact2.
Возможно ли иметь один конвейер выпуска с несколькими этапами, которые запускаются только в том случае, если существует определенный артефакт? Поэтому, если был создан Artifact1, запустите этап Artifact1Stage, но не Artifact2Stage.
Я вижу, что в DevOps есть фильтры ветвей, но это не дает мне того, чего я хочу. Я хочу отфильтровать созданный артефакт.
В задании группы развертывания (на этапе) есть опция загрузки артефакта, которая позволяет мне выбрать конкретный артефакт, который я хочу, но это не предотвращает запуск этапа (а затем сбой, если конкретный артефакт не был создан).
ИЗМЕНИТЬ: Если это имеет значение, я не использую синтаксис yaml для конвейера выпуска.
Ответ №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 задания за один этап, по одному для каждого артефакта (или два этапа с одним заданием на каждом, ваш вызов). Для
Run on agent
дополнительной опции заданияRun this Job
выберитеCustom condition using variable expressions
, и значение будет примерно такимeq(variables['whichArtifact'], 'value that tells you which artifact this is')
Значение переменной, которое вы задаете, и выбранное вами условие должны быть взаимоисключающими, чтобы вы могли четко выбрать этап/задание, которое вы хотите выполнить.