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

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

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

Каждая ветка хранит полную историю разработки в виде последовательной цепочки коммитов. Коммит — это набор изменений, снабженных дополнительной информацией (автор, дата, комментарии и номер заявки, по которой сделаны все эти изменения). Все наборы изменений, принадлежащие какой-либо ветке, доступны только для чтения, за исключением самого последнего, в который и вносятся текущие изменения. На приведенной иллюстрации для редактирования доступны только наборы 9, 14 и 15.

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

Versions_Tree

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

 

Для тестирования изменений перед вводом в эксплуатацию создается ветка Test (или Stage), на которой работают тестировщики, бизнес-аналитики и отдельные конечные пользователи, ответственные за приемку. Эта ветка время от времени синхронизируется с веткой Default сообразно планам ввода в эксплуатацию новых возможностей. Если при тестировании на этой ветке выявляются ошибки, они обычно правятся здесь же, после чего внесенные изменения переносятся на ветку Default, где они становятся доступны для синхронизации всем разработчикам.

 

Конечным пользователям для работы создается отдельная ветка Production. Синхронизируется она только с веткой Test и только тогда, когда весь функционал последней тщательно проверен тестировщиками, аналитиками и пользователями, ответственными за приемку. Любую ветку можно пометить флажком Read-only, чтобы запретить вносить в нее изменения. Это рекомендуется проделывать только с веткой Production.

Versions_Tree2

Итак, помимо веток разработчиков и ветки Default в системе обычно создаются еще две общие ветки:

Production последняя стабильная версия метаданных, предназначенная для работы рядовых пользователей системы;

Test – версия, предназначенной для тестирования перед вводом в эксплуатацию.

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

Итак, механизм версионирования позволяет:

изолировать версии метаданных с помощью веток;

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

хранить всю историю изменения метаданых с возможностью доступа к промежуточным версиям.