Как настроить конвейер сборки/выпуска Azure DevOps CI для пакетов nuget (дополнительно)
Как компания, мы создаем пакеты NuGet из различных git-репо в DevOps Azure. После того, как пакет протестирован и утвержден, его следует передать в организацию Azure DevOps.
Я до сих пор борюсь с настройкой конвейера сборки/выпуска с использованием каналов DevOps Azure. Пакеты должны стать доступными для тестирования, прежде чем они будут переданы в организацию.
Хотя Microsoft предоставляет множество рекомендаций и рекомендаций, я все еще не могу найти работоспособное решение. Я объясню решения, которые я пробовал до сих пор:
Решение А
Использование одного канала, где для всей организации. Пакеты автоматически отправляются в канал @local и по окончании тестирования в представление @prerelease и @release. Трубопровод используется следующим образом:
- Мы работаем в соответствии с GIT-потоком с разработкой, особенностями и мастер-ветвями.
- Сборка CI запускается в ветке разработки
- Пакет с суффиксом релиза pre- помещается в канал @local.
- Приемочные тесты выполняются в других инструментах путем включения флажка релиза pre- в менеджере пакетов NuGet в Visual Studio.
- Когда пакет принят, создается релиз и запускается новая сборка.
- Посылка толкается
Решение проблем A:
- Когда пакет принят, он должен быть преобразован в представление @release, но имя пакета все еще содержит суффикс -pre.
- По моему мнению, когда пакет принят, новая сборка не требуется, разве вы можете выполнить это из ветки релиза?
- Хотя пакет виден только в visual studio с суффиксом pre-, его можно переместить с суффиксом в представление @release.
- Когда пакет продвигается, он должен быть скопирован и сохранен без суффикса.
Решение Б
Использование выделенного канала для каждого репозитория git (рекомендуется Microsoft) и публикация пакетов NuGet для этого канала из сборок CI. Каждый пакет отправляется на канал @local без суффикса. Когда пакет протестирован и принят, пакет переводится в представление @release. Каждый выделенный канал настраивается как исходный источник (представление @release), пакеты из представления выпуска будут "кэшироваться" в общем канале, который используется в организации всеми группами разработчиков.
Решение проблем B:
- Пакеты, которые становятся видимыми через исходные источники, добавляются/кэшируются только после завершения одного развертывания/сборки. Вы не можете применить это, когда пакет повышен до представления @release.
- Все команды разработчиков должны подписаться в Visual Studio на все каналы NuGet, чтобы установить последнюю версию пакета. (30 git репо = 30 каналов)
Основные вопросы:
- Работает ли git-flow, когда мы создаем только пакеты NuGet?
- Должны ли мы работать с релизными пакетами pre- или сохранять их в виде релиза @pre- без суффикса?
- Неправильно начинать новую сборку, чтобы иметь пакет без суффикса. После того, как релизный пакет pre- протестирован, он должен быть переведен только в вид релиза.
- Должны ли мы собирать пакет в сборке CI и использовать релизную сборку для выпуска пакета. Я видел людей, использующих PowerShell с переменными среды для продвижения пакета из одного выпуска в другой.
Я знаю, что есть много вопросов, но я уже довольно долго борюсь с этой проблемой. Я надеюсь, что кто-то может дать мне несколько хороших предложений.
Спасибо!
Ответы
Ответ 1
@Shayki-abramczyk
Я также все еще борюсь с этой настройкой, но вы можете создать задачу сборки, которая будет выполняться только на основе условия ветвления, и на этом шаге создать пакет с предварительным тегом.
Но концептуально это не идеально, потому что вы соберете и протестируете пререлизный пакет, а затем объедините изменения с мастером, что снова создаст сборку и выпуск нового пакета (который может быть отправлен другим командам без тестирования). Поэтому нам хотелось бы иметь сборки CI, которые публикуют пакет (без тегов) в нашей команде @local, а когда все тестирование завершено, переместите пакет в представление @release, чтобы сделать его доступным для остальной части организации.
Максимальная 24-часовая задержка будет сокращена до 15 минут в первом квартале этого года Microsoft.
Ответ 2
Что я делаю, так это в своем конвейере сборки, я создаю предварительный релиз и пакет релизов и сохраняю их оба в своих артефактах.
В моем конвейере выпуска я публикую предварительный выпуск пакета в локальном кэше, как только я буду готов к UAT, я одобряю выпуск к UAT, и это публикует его как предварительный выпуск. После завершения UAT он получает разрешение на выпуск, который публикует пакет выпуска.