И как бы сделали вы.
Поставил бы
Deployer, на нем уже есть таски:
- GIT
- зависимости NPM/Composer
- чистка кеша и вот это все
- релизы (в случае ошибки -- не катить релиз и миграции откатить)
- расстановка прав и прочие штучки, если нужно
- если есть тесты -- прогон их, также phpstan и прчоее
все таски по желанию
В Gitlab CI вызывал бы в вашем случае примерно так:
deploy-master:
stage: deploy
script: dep --file=deploy/deploy.php -vvv deploy prod
Где:
dep -- запуск деплоера
prod -- название проекта из настроек самого деплоера (или окружение для нескольких проектов)
Работает так:
- создаются папки с релизами
- актуальный релиз линкуется на последний успешный
- при выкате нового -- создается папка с релизом и на него все ставится, если успешно -- ссылка преекидывается на него, если нет -- все остается как есть, нужно только учесть работу с миграциями
Если нужно очень просто
(а сейчас достаточно просто)
То просто у деплоера написал бы минимум тасок -- выложить из мастера ГИТ и перелинковать релиз