git деплой с использованием git hooks


git деплой — процесс выкатки приложения из репозитория на production сервер. Проще всего автоматизации процесс добиться через git hooks.

Хук это небольшой скрипт, который выполняется при отправке файлов в репозиторий. Скрипт может предусматривать копирование данных на рабочий сервер, сборку и выполнение какого-то кода. Можно предусмотреть любую логику, чаще всего деплой через git вызывается командой git push в ветку master.

Для больших систем используются специализированные решения.



git деплой, развертывание приложения из git


Репозиторий на production сервере будет размещаться в отдельном каталоге, его нужно создать.

mkdir -p repo/site.git

cd repo/site.git/



git деплой


Инициализируем директорию, при этом не создавая исходники. На выходе будет пустой каталог репозитория.

git init --bare

Initialized empty Git repository in /home/web/repo/site.git/



Создание git hook


mcedit hooks/post-receive

#!/bin/sh
GIT_WORK_TREE=/var/www/site.com git checkout -f


Здесь путь к каталогу с файлами сайта, от пути к репозиторию он будет отличаться.



Добавляем бит исполнения

chmod +x hooks/post-receive



hook будет выполняться после отправки данных в удаленный репозиторий (git push). Вызывается после всех обновлений.

На production сервере настройки завершены.



Настройки выполняемые локально


Теперь локальный репозиторий.


Задаем подключение к серверу

git remote add production ssh://[email protected]/home/web/repo/site.git/



Скорректировать на практике нужно имя пользователя, IP адрес сервера и путь к репозиторию.



Теперь из любой ветки репозитория можно заливать изменения на production выполняя push

git push production fix



В примере приведена ветка fix, это может быть master или любая другая.



За счет хуков достигается простейшая автоматизация. Вручную того же результата можно добиваться выполняя git push из локального репозитория в удаленный и  git pull из удаленного на сервер.



При работе с git удобно пользоваться алиасами.

Большие приложения разворачиваются при помощи CI-CD систем таких как Jenkins и Gitlab CI.

Сказать спасибо