Лучшие практики по именованию и разграничению сред в соответствии с их предназначением, взаимному соответствию сред и ветвей кода, и процессу выпуска в условиях коробок и самописных монолитов старой школы.
Именование сред
Разработки [dev]
— та среда (база данных, сайт, ВМ и т.д.), где развёртываем свежий код и смотрим, что получается.
Демо [demo]
— тут промежуточный результат показывается заказчику. Пока развёрнутый здесь полуготовый функционал ждёт внимания заказчика, на [dev]
можно всё сломать, работая дальше.
Тестовая [test]
— тут тестируется функциональность. Среда наполнена тестовыми данными, которые могут отражать редко возникающие (в рабочей среде) случаи или быть удобными для тестирования. Пока тут идёт тестирование того, что готовится в продакшен, на [dev]
уже появляется код следующего релиза.
Промежуточная [stage]
, она же предпродакшен — тут тестируется развёртывание. Сюда развёртывается последний бэкап системы из продакшена, чтобы проверить обновление на версию.
Продакшен [prod]
— тут работают пользователи.
Связь конфигурации с кодом
Бывает, что код идёт в развёртывание вместе с конфигурацией (набором переносимых настроек) и, при этом, сам код ведётся в репозитории, а конфигурация в среде. При этом, конфигурация переносится через экспорт-импорт.
Изначально, код, попадающий в ветвь /dev
, выкатывается в среду [dev]
, где настраивается конфигурация к нему. Затем, код и конфигурация (иногда по частям) переносятся в другие среды.
Путь кода
/dev
→ [dev]
/dev
→ [demo]
/dev
→ /main
/main
→ [test]
/main
→ [stage]
/main
→ [prod]
То, что исправляется в /main
при тестировании, естественно → /dev
.
Путь конфигурации
[dev]
→ [demo]
[dev]
→ экспорт в репозиторий конфигурации отдельно от кода.
репозиторий конфы → [test]
репозиторий конфы → [stage]
репозиторий конфы → [prod]
Помехи гладкому релизу
Рассмотрим, что в архитектуре ломает выпуск.
Двусторонняя зависимость
Бывает, что часть конфигурации зависит от собранного кода (от dll, jar и т. п.), но часть кода зависит от структур, создаваемых конфигуратором, либо от сборок, которые собираются конфигуратором.
Чтобы в кольцо не попасть, если что-то делается кодом, это нужно делать именно кодом. Например, в ELMA-BPM v.3.x можно создать объекты через конфигуратор, а можно через плагин к Visual Studio – выбирайте второе.
Большая и важная база данных
В системах с логикой в базе, бывает, разработчики катят её в единственный общий экземпляр БД. Обычно говорят, что эта база dev самая актуальная и наполненная.
Сегодня это архитектурное фиаско, которое сводится к описанному далее.
Одна-единственная среда
Из-за использования всего одной среды теряет смысл ветвление кода. Т. е. от /dev
бессмысленно отделять фичи т. к. они столкнутся вместе в котле разработки раньше чем они там нужны.
Что это означает? Не получается вести длинные работы и короткие праллельно, не выходит соблюдать регулярность релизов.