Продвижение пакетов
Артефакты Azure имеют представление о продвижении пакетов в представления, чтобы указать, что версия имеет определенный уровень качества.
Благодаря выборочному продвижению пакетов можно спланировать, когда пакеты имеют определенное качество и готовы к выпуску и поддержке потребителей.
Основы продвижения пакетов
Вы можете повысить уровень пакетов до одного из доступных представлений в качестве индикатора качества.
Концепция продвижения:
- Качественные ворота: Визуализации представляют различные уровни качества.
- Явное действие: Повышение является явным решением.
- Нет изменений версии: Версия пакета остается той же.
- Изменение метаданных: Изменяется только связь представления.
Представления по умолчанию для продвижения
Два представления выпуска и prerelease могут быть достаточными, но при необходимости можно создавать дополнительные представления, если требуется более подробный уровень качества, например alpha и beta.
Распространенные рабочие процессы продвижения:
@Local → @Prerelease → @Release
@Local → @Alpha → @Beta → @RC → @Release
Правила видимости пакета
Пакеты всегда будут отображаться в локальном представлении, но только в определенном представлении после продвижения.
Просмотр списка пакетов
В зависимости от URL-адреса , используемого для подключения к веб-каналу, будут перечислены доступные пакеты.
Матрица видимости:
| Состояние пакета | @Local | @Prerelease | @Release |
|---|---|---|---|
| Только что опубликовано | Да | нет | нет |
| Повышен до предварительной версии | Да | Да | нет |
| Переведено в выпуск | Да | Да | Да |
Основные принципы:
- @Local всегда отображает все: Каждый пакет отображается @Local независимо от продвижения.
- Для других представлений требуется продвижение: Пакеты должны быть явно продвинуты для отображения в других представлениях.
- Совокупная видимость: Продвижение в @Release не удаляет из @Prerelease.
Вышестоящие источники и представления
Верхнеуровневые источники будут оцениваться только при использовании @Local вида канала.
Рабочий процесс исходного пакета
После того как пакеты были скачаны и закэшированы в представлении @Local, вы сможете просматривать и разрешать их в других представлениях, когда они будут перемещены в них.
Жизненный цикл вышестоящего пакета:
- Пакет запроса: Потребитель запрашивает пакет из @Local представления.
- Проверка вышестоящих источников: Azure Artifacts проверяет вышестоящие источники, если их нет в ленте.
- Скачивание и кэширование: Пакет, скачанный из основного источника и кэшированный в @Local.
- Только локальный: Пакет теперь доступен в @Local представлении.
- Продвижение: Пакет может быть продвинут до @Prerelease вариантов просмотра или @Release вариантов просмотра.
Пример рабочего процесса:
Developer requests lodash@4.17.21 from @Local view
↓
Azure Artifacts checks npmjs.com (upstream source)
↓
Package downloaded and cached in @Local view
↓
Package available in feed, can be promoted
↓
Promote to @Release for production use
Важные заметки:
- Upstream only with @Local: Другие представления не активируют оценку исходного источника.
- Предварительно кэширование: после этого пакет обрабатывается как любой другой пакет канала данных.
- Управление продвижением: контроль утверждения исходных пакетов для производства.
Решение о сроках продвижения
Вам предстоит решать, как и когда продвигать пакеты в конкретное представление.
Критерии продвижения
Распространенные триггеры продвижения:
Повысить до @Prerelease
- Успешное построение: Пакет успешно построен в конвейере CI.
- Модульные тесты успешно выполнены: Все модульные тесты успешно прошли.
- Качество кода: Шлюзы качества кода выполнены (охват, статический анализ).
- Начальная проверка: Основные тесты дыма прошли.
Повысить до @Release
- Тесты интеграции: Тесты интеграции успешно прошли.
- Утверждение QA: Команда проверки качества утверждает.
- Проверка безопасности: Пройдена проверка уязвимостей безопасности.
- Проверка производительности: Тесты производительности соответствуют требованиям.
- Документация завершена: Заметки о выпуске и документация завершены.
Ручное и автоматическое повышение
Повышение вручную:
- Человеческое решение: Требуется человеческое решение.
- Сложные критерии: Если критерии сложно автоматизировать.
- Пакеты с высоким уровнем риска: Критически важные пакеты, требующие дополнительного контроля.
Автоматическое продвижение:
- Согласованные критерии: Когда критерии понятны и тестируются.
- Частые выпуски: Команды разработки, работающие в высоком темпе.
- Пакеты с более низким риском: Внутренние библиотеки с хорошим покрытием тестов.
Автоматизация продвижения пакета
Этот процесс можно автоматизировать с помощью задачи Azure Pipelines в рамках конвейера сборки.
Использование Azure Pipelines для повышения уровня
Задача Azure Pipelines для продвижения:
# Promote package to Prerelease view
- task: UniversalPackages@0
inputs:
command: "publish"
publishDirectory: "$(Build.ArtifactStagingDirectory)"
feedsToUsePublish: "internal"
vstsFeedPublish: "MyFeed"
vstsFeedPackagePublish: "my-package"
packagePublishDescription: "Package from build $(Build.BuildNumber)"
# Promote to Release view after tests
- task: AzureCLI@2
inputs:
azureSubscription: "Azure Subscription"
scriptType: "bash"
scriptLocation: "inlineScript"
inlineScript: |
az artifacts universal promote \
--organization https://dev.azure.com/MyOrg \
--feed MyFeed \
--name my-package \
--version $(packageVersion) \
--view Release
Пример многоэтапного конвейера
Полный конвейер с воротами повышения уровня:
trigger:
- main
stages:
# Build and publish to Local
- stage: Build
jobs:
- job: BuildPackage
steps:
- script: dotnet pack -o $(Build.ArtifactStagingDirectory)
displayName: "Build package"
- task: NuGetCommand@2
inputs:
command: "push"
packagesToPush: "$(Build.ArtifactStagingDirectory)/**/*.nupkg"
nuGetFeedType: "internal"
publishVstsFeed: "MyFeed"
# Promote to Prerelease after unit tests
- stage: PromoteToPrerelease
dependsOn: Build
jobs:
- job: RunTests
steps:
- script: dotnet test
displayName: "Run unit tests"
- task: AzureCLI@2
displayName: "Promote to Prerelease"
inputs:
azureSubscription: "Azure Subscription"
scriptType: "bash"
scriptLocation: "inlineScript"
inlineScript: |
az artifacts universal promote \
--organization https://dev.azure.com/MyOrg \
--feed MyFeed \
--name MyPackage \
--version $(Build.BuildNumber) \
--view Prerelease
# Promote to Release after integration tests and approval
- stage: PromoteToRelease
dependsOn: PromoteToPrerelease
jobs:
- job: IntegrationTests
steps:
- script: dotnet test --filter Category=Integration
displayName: "Run integration tests"
- deployment: PromoteToRelease
dependsOn: IntegrationTests
environment: "Production-Approval"
strategy:
runOnce:
deploy:
steps:
- task: AzureCLI@2
displayName: "Promote to Release"
inputs:
azureSubscription: "Azure Subscription"
scriptType: "bash"
scriptLocation: "inlineScript"
inlineScript: |
az artifacts universal promote \
--organization https://dev.azure.com/MyOrg \
--feed MyFeed \
--name MyPackage \
--version $(Build.BuildNumber) \
--view Release
Ручное продвижение через веб-интерфейс
Продвижение пакетов через портал Azure DevOps:
- Перейдите к артефактам: Перейдите к артефактам в Azure DevOps.
- Выберите фид: Найдите фид, содержащий ваш пакет.
- Поиск пакета: Найдите версию пакета, чтобы повысить уровень.
- Сведения о пакете: Выберите пакет для просмотра сведений.
- Кнопка "Продвинуть": Нажмите кнопку "Продвинуть".
- Выберите представление: Выберите целевое представление (@Prerelease или @Release).
- Подтверждать: Подтвердите повышение.
Политики продвижения и сохранения
Пакеты, которые были продвинуты до представления, не будут удалены на основе политики хранения.
Защита хранения
Повышение уровня обеспечивает защиту хранения:
- пакеты @Local: Подлежит политикам хранения.
- Продвигаемые пакеты: Защита от автоматического удаления.
- Долгосрочное хранение: Выпущенные пакеты хранятся на неопределенный срок.
Поведение политики хранения:
| View | Политика хранения | Защищено |
|---|---|---|
| Только @Local | Применимо | нет |
| @Prerelease | Применимо к @Local, а не @Prerelease | Да |
| @Release | Применимо к @Local, а не @Release | Да |
Example:
Feed retention policy: Keep only last 30 days in @Local
Package version 1.0.0:
- Published to @Local on Day 1
- Promoted to @Release on Day 5
- Day 31: Still available because promoted to @Release
- Would be deleted if not promoted
Настройка политик хранения
Установите политики хранения для каждого канала:
- Параметры веб-канала: Перейдите к параметрам веб-канала.
- Политики хранения: Выберите раздел политики хранения.
- Настроить: Задайте максимальное количество дней для хранения пакетов @Local.
- Сохранить: Примените эту политику.
Рекомендации
- Продвижение важных пакетов: Убедитесь, что важные пакеты продвигаются.
- Обычная очистка: Разрешите политикам хранения очистить непродвиженные пакеты.
- Баланс хранилища: Баланс между затратами на хранение и потребностями хранения.
Рекомендации по продвижению
Четкие критерии:
- Критерии продвижения документов: Определите, что определяет соответствие пакета для каждого представления.
- Согласованное приложение: Последовательно применяйте критерии ко всем пакетам.
- Выравнивание команды: Убедитесь, что команда понимает рабочие процессы продвижения.
Автоматизация:
- Автоматизировать, когда это возможно: Автоматизация продвижения по четким критериям.
- Ручные шлюзы для критически важных пакетов: Используйте ручное утверждение для продвижения в производственной среде.
- Тестирование перед повышением уровня: Всегда тестировать перед продвижением.
Коммуникация:
- Заметки о выпуске: Включите заметки о выпуске при продвижении в @Release.
- Журналы изменений: Сохраняйте журнал изменений о том, что изменилось в каждой версии.
- Уведомления: Уведомляйте потребителей о продвижении пакетов до @Release.
Стратегия отката:
- Сохранение предыдущих версий: Не удаляйте предыдущие @Release версии.
- Быстрый откат: Разрешить потребителям быстро вернуться к предыдущим версиям.
- Закрепление версий: Поддержка возможности закрепления пользователей за конкретными версиями.
Мониторинг рекламных акций пакетов
Отслеживайте историю продвижения:
- Журналы аудита: Azure DevOps регистрирует все действия по продвижению.
- История пакетов: Просмотр истории продвижения для каждого пакета.
- Отчеты: Создайте отчеты о шаблонах повышения уровня.
Метрики для отслеживания:
- Время для продвижения: Сколько времени от @Local до @Release.
- Сбои продвижения: Пакеты, которые не соответствуют критериям продвижения.
- Частота отката: Как часто пакеты приходится откатывать.
- Скорость продвижения: Количество рекламных акций за период времени.