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

в 14:19, , рубрики: cli, command line, javascript, node.js, npm, open source, package, version, versioning, versionings, автоматизация, версионирование, версия

Всем привет!

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

Инструмент автоматизации управления версиями - 1

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

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

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

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

image

Semantic Versioning

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

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

Инструмент автоматизации управления версиями - 3

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

Производится исправление ошибки и повышается Patch версия проекта.

Инструмент автоматизации управления версиями - 4

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

Инструмент автоматизации управления версиями - 5

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

Инструмент автоматизации управления версиями - 6

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

Инструмент автоматизации управления версиями - 7


Инструмент автоматизации управления версиями - 8


Инструмент автоматизации управления версиями - 9

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

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 среду
  • Пример проекта для построения библиотеки является абстрактным, для общего представления версионирования.

На этом все :)


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

Автор: Роман Морозов

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js