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