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

Информационная система - это несколько веб приложений, взаимодействующих друг с другом черех API (это может быть REST или шина).

Каждое веб-приложение является контейнером для одного и более сервисов.

Формирование версий происходит исходя из правил семантического версионирования.

Принципы семантического версионирования

Учитывая номер версии МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ, следует увеличивать:

  • МАЖОРНУЮ версию, когда сделаны обратно несовместимые изменения API;
  • МИНОРНУЮ версию, когда вы добавляете новый функционал, не нарушая обратной совместимости;
  • ПАТЧ-версию, когда вы делаете обратно совместимые исправления.

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

Мажорная версия сервиса меняется, если есть обратно не совместимые изменения в API сервиса. В случае если был добавлен новый функционал к сервису, но при этом он обратно совместим, тогда происходит изменение минорной версии сервиса. Багфиксы, мелкий рефакторинг, изменения по кодинг-стайлу, правки документации приводят к изменению патч-версии.

Для изменения версии сервиса меняем версию интеграционного модуля. Соответственно в случае если изменения произошли в абстрактной части сервиса, то меняется версия интеграционного модуля для абстрактной части сервиса. Если изменения затронули имплементацию сервиса под конкретную информационную систему, то меняется версия интеграционного модуля данной части.

Версионирование приложений

Версия приложения (приложение выступает контейнером для сервисов) меняется в следующих случаях:

  • Изменение версии одного из сервисов;
  • Изменения в конфигурации самого приложения.

В случае если в один из сервисов были внесены ПАТЧ-изменения, то у приложения также меняется ПАТЧ-версия. В случае если изменения были МИНОРНЫЕ или МАЖОРНЫЕ, то меняется соответственно МИНОРНАЯ и МАЖОРНАЯ часть версии приложения.

Также если были произведены изменения в настройки приложения (изменения в конфигурации веб-сервера), то такие изменения также приводят с смене версии.

  • Если затронутые правки не приносят новый функционал, то считаем, что изменения были уровня патча (поправили существующие конфиги);
  • Если был добавлен новый функционал (например, на сервере появилась внешняя система мониторинга и под нее были изменены конфиги веб-сервера), то изменения минорные;
  • Если произошли радикальные изменения в инфраструктуре сервера (например, поменяли базу данных или веб сервер), то изменения мажорные.

Версионирование модулей

Каждый модуль имеет строго обозначенное и задокументированное API.

  • Если есть другие модули, которые жестко зависят от расматриваемого модуля, то его API будет: -- Сигнатура интерфейсов (мажорные изменения - если изменилась сигнатура существующих методов, минорные - если добавились новые) -- Сигнатура абстрактных классов (мажорные изменения - если изменилась сигнатура существующих методов, минорные - если добавились новые).
  • Если зависимость мягкая (т.е. через сервисы, либо через события), то его API: -- Сигнатура методов сервиса (мажорные изменения - если поменялись существующие, минорные - если добавлены новые); -- События (мажорные изменения - если изменились имена существюущих событий, изменились объекты событий, минорные - если добавлены новые события).

Версионирование информационной системы

Версия информационной системы напрямую зависит от версии ее приложений. Версии приложений определяются версиями составляющих ее сервисов. Версии сервисов определяются версиями модулей.

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