В настоящее время моя команда использует довольно простой процесс ветвления / развертывания, который выглядит следующим образом:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Builds: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Branches: │ master │ │ qa │ │ prod │
└────────┘ └────┘ └──────┘
Каждая среда имеет свою собственную ветку (мы используем git ) и свою собственную сборку, которая использует эту ветку. Когда мы хотим перейти из одной среды в другую, например, из DEV в QA, мы объединяем master
ветку qa
и запускаем новую сборку QA (которая затем автоматически развертывается в среде QA).
Мы рассматриваем возможность перехода к новому процессу, который избавит от необходимости иметь выделенную ветку и сборку для каждой среды. Вместо этого, единственная сборка выпуска создаст «пакет развертывания», который затем можно будет развернуть в любой среде. Мы представляем, что типичный рабочий процесс будет выглядеть примерно так:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ ──► │ QA │ ──► │ PROD │
└────────┘ └────┘ └──────┘
▲
\
┌───────────────┐
Builds: │ release build │
└───────────────┘
▲
│
┌────────┐ ┌─────────┐
Branches: │ master │ │ release │
└────────┘ └─────────┘
Продвижение из одной среды в другую больше не будет обрабатываться в системе контроля версий; скорее мы просто возьмем уже собранные двоичные файлы («пакет развертывания») и добавим их в новую среду.
Эта новая система позволит нам развернуть любую сборку в любой среде, что имеет ряд преимуществ. Например, тривиально проверить исправления ошибок PROD в DEV и QA. Наша нынешняя система не предоставляет простого способа сделать это без отката ветки, чего мы, очевидно, хотели бы избежать.
Самым большим недостатком этой новой системы является то, что у нас больше нет автоматического способа отслеживать, какой код находится в какой среде. Если нам нужно исправить в PROD, у нас больше не будет выделенной ветви, синхронизированной с текущей производственной базой кода. То же самое касается QA - если мы хотим внести быстрое изменение в QA без углубления в master
текущую работу , у нас больше нет ветки, которая отражает текущее состояние среды QA.
Как мы можем отслеживать, какой код находится в каждой среде?
Некоторые варианты, которые мы рассматриваем:
- использование тегов git для отслеживания того, какой коммит находится в какой среде
- встраивание коммита git, используемого сборкой, в каждый пакет развертывания