V. Збірка, реліз, виконання
Суворо відокремлюйте етапи збірки та виконання
Кодова база перетворюється в розгортання (крім розгортання для розробки) у три етапи:
- Етап збірки — це трансформація, яка перетворює код в репозиторії у пакунок, що може бути запущений, і який називається збірка. Використовуючи версію коду за вказаним у процесі розгортання коммітом, етап збірки завантажує залежності та компілює бінарні файли і ресурси (assets).
- Етап релізу приймає збірку, отриману на етапі збірки, і об’єднує її з поточною конфігурацією розгортання. Отриманий реліз містить збірку і конфігурацію і готовий до негайного запуску в середовищі виконання.
- Етап виконання (також відомий як “runtime”) запускає застосунок у середовищі виконання, увімкнувши деякий набір процесів застосунку з певного релізу.
Застосунок дванадцяти факторів дотримується суворого відокремлення етапів збірки, релізу і виконання. Наприклад, не можна вносити зміни в код під час етапу виконання, оскільки немає способу поширити ці зміни назад на етап збірки.
Інструменти розгортання, як правило, надають засоби керування релізами, які дають можливість відкату до попередньої версії. Наприклад, інструмент розгортання Capistrano зберігає релізи в підкаталог з назвою releases
, де поточний реліз є символічним посиланням на каталог поточного релізу. Команда Capistrano rollback
дає можливість швидко виконати відкат до попередньої версії.
Кожен реліз повинен завжди мати унікальний ідентифікатор, наприклад, мітку часу релізу (наприклад, 2011-04-06-20:32:17
) або номер, що зростає (наприклад, v100
). Релізи можуть тільки додаватися, неможливо змінити реліз після його створення. Будь-які зміни мають створювати новий реліз.
Збірка ініцюється розробником застосунку щоразу при розгортанні нового коду. Запуск етапу виконання, навпаки, може відбуватися автоматично в таких випадках, як перезавантаження сервера або перезапуск процесу, шо впав, менеджером процесів. Таким чином, етап виконання має бути максимально технічно простим, бо проблеми, які заважають застосунку запуститися, можуть призвести до його зупинки посеред ночі, коли розробників немає на місці. Етап збірки може бути більш складним, бо можливі помилки завжди видимі розробнику, який запустив процес розгортання.