Недавно я писал заметку об установке GitLab на сервер в «ручном режиме». В процессе использования выяснилась одна каверзная вещь — GitLab не умеет создавать хуки типа post-receive из панели для определенных репозиториев. Но мы на работе используем сервер с GitLab как сервер разработки и нужно, чтобы на сервере крутились проекты, которые мы правим через GitLab.
К счастью, это решаемо и сейчас опишу эти несложные действия.
1. Первым делом создадим хост для веб-сервера. Как это сделать уже писал не раз, повторять уже лень, поэтому представим, что мы его уже создали и ссылается он на папку /home/www/site.com.
2. Через консоль нужно зайти в репозиторий и в нем создать папку current_hooks:
# mkdir /home/git/repositories/user/project.git/custom_hooks/
где:
user — имя пользователя или название группы, который является владельцем проекта
project — название проекта, для которого создаем хук
3. Теперь создадим сам хук:
# nano /home/git/repositories/user/project.git/custom_hooks/post-receive
Впишем в него чекаут для обновления файлов в папке хоста:
#!/bin/sh GIT_WORK_TREE=/home/www/site.com git checkout -f
4. Теперь нужно выставить владельцем папки и файлов пользователя git, а хуку нужно выставить права на выполнение:
# chown -R git:git /home/git/repositories/user/project.git/custom_hooks/ # chmod +x /home/git/repositories/user/project.git/custom_hooks/post-receive
5. Финальный шрих. Для корректной работы нужно, чтобы владельцем папки хоста был пользователь git.
# chown -R git:git /home/www/site.com
Теперь можно пушить в GitLab и проверять! 🙂