Выпуск запускается, даже если сборка не публикует артефакт - PullRequest
0 голосов
/ 23 мая 2019

На прошлой неделе наша команда решила перенести все отдельные проекты .NET в одно решение.Поскольку мы уже использовали DevOps Azure с отдельными конвейерами сборки для каждого проекта, мы рассмотрели возможность запуска сборок только при наличии изменений в конкретном проекте.Это предотвращает перестроение агентами сборки всего решения при каждом коммите.

Поскольку наш исходный репозиторий является локально размещенным Git, у нас нет тонкостей использования фильтров пути, поэтому мы прибегли к использованиюЗадача Powershell, чтобы определить, следует ли пропускать все предстоящие задачи, используя пользовательское условие (объяснено в этом ТА вопросе).

Теперь при каждой фиксации запускаются все сборки, но сборкиРешите для себя, должны ли они продолжать сборку и (что более важно), если они должны опубликовать артефакт сборки в конце.Ниже приведен пример такой пропущенной сборки:

Skipped Azure DevOps build example

Однако каждый раз, когда такая сборка «завершается успешно», создается новый артефакт, даже еслизадание публикации артефакта пропущено.Проблема в том, что все наши конвейеры выпуска запускаются, когда конвейер сборки создает артефакт.Поэтому каждый раз, когда сборка пропускается, как показано выше, конвейер выпуска запускается и пытается развернуть артефакт.Но он терпит неудачу, потому что артефакт, который он использует для развертывания, в действительности не существует (кажется, что он пуст, и конвейер сборки фактически не упоминает артефакт на вкладке Сводка), поэтому любые операции над артефактом завершаются неудачно в выпуске.pipe.

Наши конвейеры выпуска настроены для запуска на тип источника build artifact, для соответствующего конвейера сборки, с параметром версия по умолчанию , установленным на latest.

Как это возможно, что, даже если задача публикации артефактов пропущена, конвейер выпуска по-прежнему срабатывает и пытается развернуть пустой артефакт?

1 Ответ

1 голос
/ 23 мая 2019

Я предполагаю, что вы включили Продолжение доставки в конвейерах Releases, этот параметр не связан с артефактами сборки.эта опция означает, что Release будет срабатывать при успешной сборке (не имеет значения, есть ли у него артефакты или нет).

Так вот почему после каждой сборки запускается новый выпуск.

КакВ качестве обходного пути, вы можете добавить задачу в сборку, которая добавляет «тег сборки», только когда есть артефакты, и в опциях выпуска артефактов вместо выбора Latest вы можете выбрать Latest from the build pipeline default branch with tags и указать тег, который вы вставили вbuild.
Другой вариант заключается в том, что в «Этапы» щелкните триггеры, а затем он настроен на «После выпуска», поэтому включите «Фильтры артефактов» и укажите там тег сборки.

Как добавитьтег сборки?добавьте задачу PowerShell с помощью этой команды:

Write-Host "##vso[build.addbuildtag]test-tag"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...