Продвижение пакетов

Завершено

Артефакты Azure имеют представление о продвижении пакетов в представления, чтобы указать, что версия имеет определенный уровень качества.

Благодаря выборочному продвижению пакетов можно спланировать, когда пакеты имеют определенное качество и готовы к выпуску и поддержке потребителей.

Основы продвижения пакетов

Вы можете повысить уровень пакетов до одного из доступных представлений в качестве индикатора качества.

Концепция продвижения:

  • Качественные ворота: Визуализации представляют различные уровни качества.
  • Явное действие: Повышение является явным решением.
  • Нет изменений версии: Версия пакета остается той же.
  • Изменение метаданных: Изменяется только связь представления.

Представления по умолчанию для продвижения

Два представления выпуска и prerelease могут быть достаточными, но при необходимости можно создавать дополнительные представления, если требуется более подробный уровень качества, например alpha и beta.

Распространенные рабочие процессы продвижения:

@Local → @Prerelease → @Release
@Local → @Alpha → @Beta → @RC → @Release

Правила видимости пакета

Пакеты всегда будут отображаться в локальном представлении, но только в определенном представлении после продвижения.

Просмотр списка пакетов

В зависимости от URL-адреса , используемого для подключения к веб-каналу, будут перечислены доступные пакеты.

Матрица видимости:

Состояние пакета @Local @Prerelease @Release
Только что опубликовано Да нет нет
Повышен до предварительной версии Да Да нет
Переведено в выпуск Да Да Да

Основные принципы:

  • @Local всегда отображает все: Каждый пакет отображается @Local независимо от продвижения.
  • Для других представлений требуется продвижение: Пакеты должны быть явно продвинуты для отображения в других представлениях.
  • Совокупная видимость: Продвижение в @Release не удаляет из @Prerelease.

Вышестоящие источники и представления

Верхнеуровневые источники будут оцениваться только при использовании @Local вида канала.

Рабочий процесс исходного пакета

После того как пакеты были скачаны и закэшированы в представлении @Local, вы сможете просматривать и разрешать их в других представлениях, когда они будут перемещены в них.

Жизненный цикл вышестоящего пакета:

  1. Пакет запроса: Потребитель запрашивает пакет из @Local представления.
  2. Проверка вышестоящих источников: Azure Artifacts проверяет вышестоящие источники, если их нет в ленте.
  3. Скачивание и кэширование: Пакет, скачанный из основного источника и кэшированный в @Local.
  4. Только локальный: Пакет теперь доступен в @Local представлении.
  5. Продвижение: Пакет может быть продвинут до @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:

  1. Перейдите к артефактам: Перейдите к артефактам в Azure DevOps.
  2. Выберите фид: Найдите фид, содержащий ваш пакет.
  3. Поиск пакета: Найдите версию пакета, чтобы повысить уровень.
  4. Сведения о пакете: Выберите пакет для просмотра сведений.
  5. Кнопка "Продвинуть": Нажмите кнопку "Продвинуть".
  6. Выберите представление: Выберите целевое представление (@Prerelease или @Release).
  7. Подтверждать: Подтвердите повышение.

Политики продвижения и сохранения

Пакеты, которые были продвинуты до представления, не будут удалены на основе политики хранения.

Защита хранения

Повышение уровня обеспечивает защиту хранения:

  • пакеты @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

Настройка политик хранения

Установите политики хранения для каждого канала:

  1. Параметры веб-канала: Перейдите к параметрам веб-канала.
  2. Политики хранения: Выберите раздел политики хранения.
  3. Настроить: Задайте максимальное количество дней для хранения пакетов @Local.
  4. Сохранить: Примените эту политику.

Рекомендации

  • Продвижение важных пакетов: Убедитесь, что важные пакеты продвигаются.
  • Обычная очистка: Разрешите политикам хранения очистить непродвиженные пакеты.
  • Баланс хранилища: Баланс между затратами на хранение и потребностями хранения.

Рекомендации по продвижению

Четкие критерии:

  • Критерии продвижения документов: Определите, что определяет соответствие пакета для каждого представления.
  • Согласованное приложение: Последовательно применяйте критерии ко всем пакетам.
  • Выравнивание команды: Убедитесь, что команда понимает рабочие процессы продвижения.

Автоматизация:

  • Автоматизировать, когда это возможно: Автоматизация продвижения по четким критериям.
  • Ручные шлюзы для критически важных пакетов: Используйте ручное утверждение для продвижения в производственной среде.
  • Тестирование перед повышением уровня: Всегда тестировать перед продвижением.

Коммуникация:

  • Заметки о выпуске: Включите заметки о выпуске при продвижении в @Release.
  • Журналы изменений: Сохраняйте журнал изменений о том, что изменилось в каждой версии.
  • Уведомления: Уведомляйте потребителей о продвижении пакетов до @Release.

Стратегия отката:

  • Сохранение предыдущих версий: Не удаляйте предыдущие @Release версии.
  • Быстрый откат: Разрешить потребителям быстро вернуться к предыдущим версиям.
  • Закрепление версий: Поддержка возможности закрепления пользователей за конкретными версиями.

Мониторинг рекламных акций пакетов

Отслеживайте историю продвижения:

  • Журналы аудита: Azure DevOps регистрирует все действия по продвижению.
  • История пакетов: Просмотр истории продвижения для каждого пакета.
  • Отчеты: Создайте отчеты о шаблонах повышения уровня.

Метрики для отслеживания:

  • Время для продвижения: Сколько времени от @Local до @Release.
  • Сбои продвижения: Пакеты, которые не соответствуют критериям продвижения.
  • Частота отката: Как часто пакеты приходится откатывать.
  • Скорость продвижения: Количество рекламных акций за период времени.