2015-11-13 2 views
2

Я использую Gitlab. Gitlab создает следующую ссылку, чтобы распределить те же крючки через всех репозиторииНесколько git post-receive hooks

hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks 

В этом каталоге уже есть post-receive крючка для обработки фиксаций надлежащим образом в Gitlab который написан на Ruby. Я хотел бы добавить дополнительный крючок, написанный в bash. Это возможно?

С наилучшими пожеланиями

ответ

3

Gitlab поддерживает крюки проект в $GIT_DIR/custom_hooks directory.

Это поддерживается для pre-receive, post-receive и update крючками.

Из вышеприведенной страницы:

Обычно, Git крючки помещаются в хранилище или крючках проекта каталога. GitLab создает символическую ссылку из каждого каталога крюка в каталог крючков gitlab-shell для упрощения обслуживания между обновлениями gitlab-shell. Таким образом, пользовательские перехватчики реализованы в по-другому. Поведение точно так же, как только крюк создан. Выполните следующие действия, чтобы настроить пользовательский крючок.

  1. Выберите проект, требующий специального крюка git.
  2. На сервере GitLab перейдите в каталог репозитория проекта. Для установки из источника путь обычно равен /home/git/repositories/<group>/<project>.git. Для Omnibus устанавливается путь , как правило, /var/opt/gitlab/git-data/repositories/<group>/<project>.git.
  3. Создайте новый каталог в этом месте под названием custom_hooks.
  4. Внутри нового каталога custom_hooks создайте файл с именем, соответствующим типу hook. Для предварительного приема имя файла должно быть pre-receive без расширения.
  5. Сделайте файл с файлом крючка исполняемым и убедитесь, что он принадлежит git.
  6. Напишите код, чтобы сделать функцию git hook, как ожидалось. Крючки могут быть на любом языке. Убедитесь, что «shebang» наверху правильно отражает тип языка. Например, если скрипт находится в Ruby, то shebang, вероятно, будет #!/usr/bin/env ruby.

Вот и все! Предположим, что код крючка правильно выполнен, крюк будет стрелять, если необходимо.

Запуск нескольких крючков одного и того же типа

Теперь это может быть сделано, как и любой другой репозиторий: Написать скрипт делегации направить работу всех реализаций крючками, которые вы хотите быть запущена. Например:

#!/bin/bash 

# Allow to run multiple hooks 
# For each hook type (post-receive, post-update, ...) create a type.d subdirectory, e.g. post-receive.d/ 
# Then put all hook scripts into that directory and make them executable. 

# Requires the "pee" utility from moreutils package: http://joeyh.name/code/moreutils/ or use "apt install moreutils" 
# pee duplicates stdinput to all scripts 

script_dir=$(dirname $0) 
hook_name=$(basename $0) 

hook_dir="$script_dir/$hook_name.d" 
if [[ -d $hook_dir ]]; then 
    pee $hook_dir/* $* 
fi 

exit 0