Ответ
В моей предыдущей роли мы работали с монолитом на PHP (Laravel) и использовали инструмент Deployer для автоматизации. Процесс был следующим:
Основные этапы:
- Подготовка: Все изменения мержились в
develop, проходили code review и полный набор тестов (PHPUnit, Pest). Для релиза создавался Pull Request изdevelopвmaster. - Релиз: После мержа в
masterJenkins-джоба автоматически запускала деплой на staging-сервер. - Деплой на продакшн: После проверки на staging я вручную запускал деплой на production через команду Deployer. Это было сознательное решение для контроля времени релиза.
Пример конфигурации Deployer (deploy.php):
<?php
namespace Deployer;
host('production')
->set('deploy_path', '/var/www/my-app')
->set('branch', 'master');
task('deploy', [
'deploy:prepare',
'deploy:vendors',
'artisan:migrate', // --force в production
'artisan:cache:clear',
'deploy:publish'
]);
Ключевые практики:
- Миграции: Запускались с флагом
--forceтолько в рамках деплоя, что гарантировало их атомарность с развертыванием кода. - Обратный прокси: Использовался Nginx, поэтому для обновления кода без простоя мы применяли
php-fpm: reload. - Откат: В Deployer есть встроенная команда
dep rollback, которая быстро возвращала предыдущую рабочую версию.