Хабрахабр

[Из песочницы] Инструмент автоматизации управления версиями

Всем привет!

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

Я разработчик в очень интересной компании Softeq, где каждый человек -вдохновитель.
Меня зовут Роман.

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

Версионирование

Версионирование — разработка и управление несколькими выпусками продукта, которые имеют тот же общий функционал, но усовершенствованы, модернизированы либо индивидуализированы.
Коротко, версия говорит об изменении продукта. Как версия говорит об изменении продукта?
Давайте назовем систему упорядочивания символов для обозначения версии продукта — схемой версионирования. Различные схемы версионирования были созданы для отслеживания версий различного программного обеспечения.

image

Семантическое версионирование

Схем версионирования много, но мы сталкиваемся с Семантическим версионированием (Semantic Versioning) каждый день. Для Семантического версионирования характерно то, что номера версий и то, как они меняются, передают смысл содержания исходного кода и какие модификации были применены от одной версии к другой.

Рассмотрим, каким образом формируется номер Семантической версии.

Главная задача проекта — управление построением библиотеки. Давайте представим, что у нас имеется проект в разработке. В настоящее время спроектирована архитектура приложения, произведена реализация базовых задач. Проект позволяет производить заказ материалов для построения здания, контролировать этапы построения библиотеки. Производится исправление ошибки и повышается Patch версия проекта. При тестировании функционала заказа материалов для построения здания библиотеки обнаруживается ошибка, bug.

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

Через некоторое время у заказчика возникла идея по развитию данной технологии автоматизации бизнеса. Проект был успешно реализован. Разработчики проявили высокую компетентность, и через некоторое время архитектура проекта была спроектирована для решения и новых, и старых задач. В предстоящих планах были совершенно новые сервисы: формирование команды строителей, внутренняя социальная сеть, внутренний обмен документами и прочее. Повысилась Major версия проекта. Новая архитектура проекта внесла обратно несовместимые изменения.

Полная картина выглядит так, но с ней вы сталкиваетесь редко.

Итак, мы представляем, что же такое версии продукта. Но как ими управлять?
Давайте рассмотрим инструмент автоматизации управления версиями.

Versionings

NPM: https://www.npmjs.com/package/versionings
GitHub: https://github.com/morozow/versionings

Управление версиями производится при помощи командной строки:

versionings --semver=[<semantic-version> | patch | prepatch | minor | preminor | premajor | prerelease | major] --branch=[<version-branch-name> | any-hyphen-case-less-100-characters-string] [--push]

Актуальная версия продукта хранится как в ./package.json файле проекта, так и в Git тегах и ветке повышения версии. Автоматизация имеет возможность интеграции с различными сторонними инструментами — управление версиями производится через CLI команду.

Давайте рассмотрим пример повышения версии продукта.

Действия

Ведется разработка проекта актуальной версии 2.5.3. Разработка нового сервиса проекта ведется в ветке crm-user-service. Завершилась разработка сервиса, закоммичены все изменения и принято решение о повышении минорной версии:

versionings --semver=minor --branch=user-service --push

Результат

  • Новая ветка: version/minor/v2.6.0-user-service
  • Изменение версии в ./package.json: 2.5.3 -> 2.6.0
  • Commit новой версии продукта в веткe version/minor/v2.6.0-user-service
  • Push новой ветки с реализацией сервиса и повышенной версии продукта.
  • Создание Pull Request для ветки version/minor/v2.6.0-user-service, которая содержит реализацию сервиса и повышенную версию продукта

Замечания

  • Инструмент автоматизации ориентирован на Unix среду
  • Пример проекта для построения библиотеки является абстрактным, для общего представления версионирования.

На этом все :)


Всем продуктивного настроения и отличного дня!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть