суббота, 27 апреля 2013 г.

Настройка оповещателя о push в Git репозиторий

Всем привет! В прошлом посте (Настройка Git для разработки на сервере и клиенте) я рассказал как развернуть Git на сервере и клиенте. Теперь у нас есть готовая система контроля версий которая поможет нам в разработке. При работе с любой системой иногда (или всегда :) хочется расширить ее функциональность, добавить что-то нужное, то что может облегчить нам работу.

Этот пост о том как можно улучшить Git, а именно добавить функционал оповещателя о push в удаленный репозиторий.


Итак, у нас есть сервер с установленным Debian 6, заходим на него и ставим все необходимое:

# apt-get install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8 libopenssl-ruby libxslt-dev libxml2-dev
# gem install nokogiri # gem install git-commit-notifier

Теперь заходим под юзером "git":

# su git

"git" - это профиль Git юзера на сервере под которым разработчики делают push\pull в\из удаленного репозитория. Данного пользователя мы создали в посте "Настройка Git для разработки на сервере и клиенте"). Если зайти не удается и SSH сообщает "fatal: What do you think I am? A shell?" - необходимо зайти под root'ом и сменить шелл для пользователя "git" с git-shell на sh.
Если зайти удалось, делаем следующее:

$ cd ~
$ wget https://github.com/bitboxer/git-commit-notifier
/raw/fba1c270802b9929a67a14be84f8d0c2ed0e2af4/config/git-notifier-config.example.yml

Последнюю версию данного файла вы можете найти здесь: https://github.com/bitboxer/git-commit-notifier/tree/master/config. Открываем его для редактирования:

$ nano git-notifier-config.example.yml

Ищем строку с директивой "mailinglist" и добавляем список e-mail'ов на которые будут идти оповещения о push:

# The recipient (or newsgroup for nntp) for the commit
# It can send to multiple destinations, just separate email addresses by ",".
mailinglist: email@mymail.ru,user@gmail.com

Теперь необходимо настроить хук, который будет выполняться на сервере после push (подробнее о хуках можно почитать здесь: http://progit.org/book/ru/ch7-3.html). Переходим в папку с хуками и открываем файл post-receive:

$ cd myproject.git/hooks
$ nano post-receive

В него вставляем следующее:

#!/bin/sh
/var/lib/gems/1.8/gems/git-commit-notifier-0.10.4/bin/git-commit-notifier
/home/git/git-notifier-config.example.yml

Сохраняем файл и делаем его исполняемым:

$ chmod +x post-receive

После установки Ruby также желательно проверить его установленные бинарники:

$ locate /usr/bin/ruby
/usr/bin/ruby /usr/bin/ruby1.8

В случае если строки "/usr/bin/ruby" нет - необходимо создать символическую ссылку на ruby1.8:

# ln -s /usr/bin/ruby1.8 /usr/bin/ruby

Ну вот и все теперь всем указанным адресатам будет приходить оповещения о push вот в таком "няшном" виде: