На прошлой неделе наша команда решила перенести все отдельные проекты .NET в одно решение.Поскольку мы уже использовали DevOps Azure с отдельными конвейерами сборки для каждого проекта, мы рассмотрели возможность запуска сборок только при наличии изменений в конкретном проекте.Это предотвращает перестроение агентами сборки всего решения при каждом коммите.
Поскольку наш исходный репозиторий является локально размещенным Git, у нас нет тонкостей использования фильтров пути, поэтому мы прибегли к использованиюЗадача Powershell, чтобы определить, следует ли пропускать все предстоящие задачи, используя пользовательское условие (объяснено в этом ТА вопросе).
Теперь при каждой фиксации запускаются все сборки, но сборкиРешите для себя, должны ли они продолжать сборку и (что более важно), если они должны опубликовать артефакт сборки в конце.Ниже приведен пример такой пропущенной сборки:
Однако каждый раз, когда такая сборка «завершается успешно», создается новый артефакт, даже еслизадание публикации артефакта пропущено.Проблема в том, что все наши конвейеры выпуска запускаются, когда конвейер сборки создает артефакт.Поэтому каждый раз, когда сборка пропускается, как показано выше, конвейер выпуска запускается и пытается развернуть артефакт.Но он терпит неудачу, потому что артефакт, который он использует для развертывания, в действительности не существует (кажется, что он пуст, и конвейер сборки фактически не упоминает артефакт на вкладке Сводка), поэтому любые операции над артефактом завершаются неудачно в выпуске.pipe.
Наши конвейеры выпуска настроены для запуска на тип источника build artifact
, для соответствующего конвейера сборки, с параметром версия по умолчанию , установленным на latest
.
Как это возможно, что, даже если задача публикации артефактов пропущена, конвейер выпуска по-прежнему срабатывает и пытается развернуть пустой артефакт?