Настраиваем авто-деплой по коммиту

Сегодня я покажу, как можно настроить авто-деплой по коммиту на примере gitolite. Это может быть удобно для тестовых сред, чтобы сэкономить ваше время.

У нас workflow построен таким образом, что после того, как фича реализована локально, разрабочик заливает ее на тестовый сервер и делегирует задачу на QA. То есть, по сути, после реализации каждой задачи мы делаем коммит в репозиторий. Затем необходимо лезть на сервер и делать git pull. Сегодня мы автоматизируем этот процесс. Конечно, это касается только PHP-проектов, потому что для Rails есть Capistrano.

Переходим в папку хуков проекта на вашем сервере

cd /home/git/repositories/project.git/hooks

И создаем новый хук

vi post-receive
#!/bin/sh
umask 0022 
read oldrev newrev ref
branch=${ref#refs/heads/}

if [ "dev" == "$branch" -o "master" == "$branch" ]; then
    echo "Current branch is $branch"
    cd "/var/www/$branch.project.ru/public_html"
    echo "Pull changes to `pwd`..."
    git --git-dir=".git" pull origin $branch
    echo "Done!"
fi

В данном скрипте у нас определяется ветка, в которую был сделан коммит. Если это dev или master, то мы подтягиваем изменения в нужном месте. В конец можно так же добавить команды для выполнения миграций и компиляции статики, если это необходимо.

Данное решение уже давно работает у нас и сильно облегчает процесс выкатки релизов для QA.