Как настроить хуки на стороне сервера в Gerrit 2.16

Я начал использовать Gerrit 2.16 в качестве инструмента проверки кода и хочу настроить хуки на стороне сервера для проверки сообщения git commit, когда изменение фиксируется/отправляется в gerrit.

Попытался использовать хуки, скопировав скрипты в $GIT_DIR/hooks (такие скрипты, как ref-update, patchset-created, change-merged), дал разрешение на gerrit-сервере, но ничего не работает.

Перехватчик commit-msg можно включить в локальном репозитории с помощью команды give в пользовательском интерфейсе gerrit.

пример: git clone ssh://@:29418/Project1 && scp -p -P 29418 @:hooks/commit-msg /.git/hooks/

change_ID будет сгенерирован автоматически, если этот хук включен.

Этот скрипт commit-msg загружается в локальный репозиторий при выполнении вышеуказанной команды.
Мой вопрос; Можем ли мы найти путь к этому скрипту на сервере gerrit, чтобы я мог изменить и применить проверку сообщения git commit?

Или есть другой способ включить перехватчики на стороне сервера gerrit?


person cloudops    schedule 19.01.2018    source источник


Ответы (3)


Нет, вы не найдете путь commit-msg на сервере Gerrit, и Git/Gerrit не будет автоматически использовать какие-либо ловушки, которые вы добавили в $GIT_DIR/hooks. Если вы хотите иметь локальные хуки, вам нужно будет вручную установить их в локальный каталог REPOSITORY/.git/hooks.

Gerrit не запускает какие-либо стандартные git-перехватчики в репозиториях, с которыми он работает, но у него есть собственный механизм перехватчиков, включенный через Плагин хуков. См. здесь больше информации о поддерживаемых хуках Gerrit. Подключаемый модуль Hooks представляет собой основной подключаемый модуль (упакованный в файле войны Gerrit и может быть легко установлен во время инициализации Gerrit).

Я предлагаю вам взглянуть на Git::Hooks (фреймворк Perl для реализации хуков Git/Gerrit). Мы используем в нашей компании, и это действительно здорово. Вы можете использовать его для реализации того, что хотите, и многого другого...

person Marcelo Ávila de Oliveira    schedule 20.01.2018
comment
Спасибо за ответ Марсело Авила де Оливейра. Чтобы добавить больше в Gerrit в gerrit 2.14, поведение хука gerrit изменено в соответствии с приведенной ниже документацией gerritcodereview.com/releases/, commit-received — это имя файла, который запускается из каталога ‹GERRIT_SERVER›/hooks на сервере gerrit, когда git commit выполняется из клиента git. . поэтому commit-received может быть простым скриптом оболочки для проверки сообщений фиксации git. - person cloudops; 22.01.2018
comment
Привет, Марсело Авила де Оливейра, я установил GIT:Hooks из cpan, пытаясь найти, как мы можем реализовать подключаемый модуль gerrit на стороне сервера для проверки сообщений фиксации в GERRIT_DIR (/opt/gerrrit/gerrit_site): - person cloudops; 23.01.2018
comment
cd /opt/gerrit/gerrit_site/git/Project_Example.git; cat config [core] relayformatversion = 0 filemode = true bare = true logallrefupdates = true [gitooks] plugin = CheckLog nocarp = 1 [githooks CheckLog] title-required = 1 title-max-width = 60 body-max-width = 80 Триггер gerrit по-прежнему не вызывается, когда выполняется фиксация, я что-то здесь упустил? - person cloudops; 23.01.2018
comment
Создали ли вы хук, созданный набором исправлений, в каталоге GERRIT-SITE/hooks (шаг настройки 1 в stackoverflow.com/questions/46100437/)? - person Marcelo Ávila de Oliveira; 23.01.2018
comment
Я использую Gerrit 2.16, у меня работает только один хук, т.е. commit-received. никакой другой хук не работает, ссылка ниже также говорит то же самое: gerritcodereview.com/releases/ Изменение поведения хука ref-update Вместо того, чтобы вызываться при каждом полученном коммите, хук ref-update теперь вызывается до завершения операции обновления ref. Предыдущее поведение хука ref-update перенесено в новый хук с именем commit-received. Сайты, использующие хук ref-update, должны переименовать файл хука в commit-received. - person cloudops; 23.01.2018
comment
это работает, если я сохраняю полученный файл фиксации в GERRIT_DIR/hooks, как мне создать конкретные крючки для проекта? пример: GERRIT_DIR/git/project123.git/hooks/commit-received каким должно быть содержимое файла в файле GERRIT_DIR/hooks/commit_received, чтобы он перенаправлял хук на конкретный хук проекта - person cloudops; 23.01.2018
comment
Вы не можете сделать это на Геррите. Все хуки остаются в общем каталоге GERRIT_DIR/hooks, вы создаете определенные конфигурации проекта, устанавливая разные файлы GERRIT_DIR/git/project123.git/config, как указано в шаге 2 настройки на stackoverflow.com/questions/46100437/. - person Marcelo Ávila de Oliveira; 24.01.2018

person    schedule
comment
не уверен насчет последней версии Gerrit, с 2.16 я смог заставить это работать: приведенный выше скрипт взят из ‹GERRIT_DIR›/hooks/commit-received - person cloudops; 24.01.2018
comment
хорошее решение, возможно, вы могли бы объединить свои ответы в один пост? - person gybandi; 26.09.2019

person    schedule
comment
Поместите приведенный выше скрипт в каталог специальных хуков проекта GERRIT_DIR/git/‹projectname.git›/hooks/commit-received. Это работает нормально. - person cloudops; 24.01.2018