Знакомство

Завершено

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

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

Изменения программного обеспечения с течением времени. Требования к программному обеспечению не остаются неизменными.

Эволюция программного обеспечения:

  • Рост функциональных возможностей: Функциональные возможности, которые она предлагает и ее использование, будут расти, изменяться и адаптироваться на основе отзывов.
  • Эволюция платформы: Размещение приложения также может развиваться с новыми операционными системами, новыми платформами и их версиями.
  • Исправления ошибок: Исходная реализация может содержать недостатки и ошибки.
  • Непрерывное изменение: Независимо от причины изменения, маловероятно, что программное обеспечение стабильно и не нужно изменять.

Влияние зависимостей:

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

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

Управление версиями и зависимостями

Управление версиями также важно для управления зависимостями, так как оно относится к версиям пакетов и компонентам внутри.

Отслеживание зависимостей:

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

  • Уникальная идентификация: Имя + версия однозначно идентифицирует пакет.
  • Независимый жизненный цикл: Каждый из пакетов имеет свой жизненный цикл и скорость изменения.
  • Управление версиями: Обеспечивает точный контроль над используемыми версиями пакетов.

Преимущества правильного управления версиями:

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

Неизменяемые пакеты

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

Спецификация версии

Для этого необходимо указать определенную версию пакета. Это означает, что сами пакеты всегда должны иметь новую версию при изменении.

Почему неизменяемость имеет значение:

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

Основной принцип:

По сути, опубликованный пакет неизменяем.

Правила неизменяемости пакетов

Замена или обновление существующей версии пакета не допускается. Большинство репозиториев пакетов не разрешают операции, изменяющие текущую версию.

Влияние неизменяемости:

  • Надёжность: Потребители могут доверять, что версия не меняется неожиданно.
  • Последовательность: Все потребители получают один и тот же пакет для данной версии.
  • Безопасность: Запрещает вредоносные изменения существующих версий.
  • Возможность аудита: История версий остается сохраненной и отслеживаемой.

Прогрессирование версий

Независимо от размера изменения, пакет можно обновить только путем введения новой версии.

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

Нумерирование версий сообщает:

  • Область изменений: Основные, незначительные или исправления.
  • Совместимость: Ломающие и совместимые изменения.
  • Уровень качества: Предварительная версия и стабильная версия.
  • Намерение: Что обновление должно достичь.

Общие сведения о модуле

В этом модуле описываются стратегии управления версиями для упаковки, рекомендации по управлению версиями и продвижение пакетов.

Охватываемые темы:

  • Основы управления версиями артефактов: Общие сведения о типах версий и схемах.
  • Семантическое управление версиями: Внедрение SemVer 2.0 для согласованного взаимодействия.
  • Представления артефактов Azure: Использование @Local, @Prerelease, и @Release представлений.
  • Продвижение пакетов: Перемещение пакетов между уровнями качества.
  • Автоматическое управление версиями: Отправка пакетов из конвейеров CI/CD.
  • Рекомендации: Реализация эффективных стратегий управления версиями.

Цели обучения

После завершения этого модуля учащиеся и специалисты могут:

  • Общие сведения о важности управления версиями: Распознать, почему правильное управление версиями имеет решающее значение для управления зависимостями и стабильности программного обеспечения.
  • Реализуйте стратегии управления версиями: Разработка и применение эффективных схем нумерирования версий для пакетов.
  • Используйте семантическое управление версиями: Применение принципов семантического управления версиями (SemVer 2.0) для согласованного взаимодействия с версиями.
  • Управление качеством пакета: Используйте представления артефактов Azure для разделения пакетов по уровню качества.
  • Продвижение пакетов: Перемещение пакетов через шлюзы качества из предварительного выпуска в производственную среду.
  • Автоматизация управления версиями: Отправка пакетов из конвейеров сборки с соответствующими номерами версий.
  • Применяйте лучшие практики: Следуйте отраслевым стандартам управления версиями и пакетами.

Необходимые условия

  • Основные сведения о DevOps: Базовое понимание того, что такое DevOps, и его понятия.
  • Знания об управлении версиями: Знакомство с принципами управления версиями полезно, но не требуется.
  • Опыт в доставке программного обеспечения: Полезно иметь опыт работы в организации, которая поставляет программное обеспечение.
  • Доступ к Azure DevOps: Для некоторых упражнений необходимо создать организацию Azure DevOps и командный проект. Если у вас еще нет этого, см. следующие статьи:
  • Основы управления пакетами: Понимание пакетов, источников и управления зависимостями из предыдущих модулей.