Gitlab поддерживает крюки проект в $GIT_DIR/custom_hooks
directory.
Это поддерживается для pre-receive
, post-receive
и update
крючками.
Из вышеприведенной страницы:
Обычно, Git крючки помещаются в хранилище или крючках проекта каталога. GitLab создает символическую ссылку из каждого каталога крюка в каталог крючков gitlab-shell для упрощения обслуживания между обновлениями gitlab-shell. Таким образом, пользовательские перехватчики реализованы в по-другому. Поведение точно так же, как только крюк создан. Выполните следующие действия, чтобы настроить пользовательский крючок.
- Выберите проект, требующий специального крюка git.
- На сервере GitLab перейдите в каталог репозитория проекта. Для установки из источника путь обычно равен
/home/git/repositories/<group>/<project>.git
. Для Omnibus устанавливается путь , как правило, /var/opt/gitlab/git-data/repositories/<group>/<project>.git
.
- Создайте новый каталог в этом месте под названием custom_hooks.
- Внутри нового каталога custom_hooks создайте файл с именем, соответствующим типу hook. Для предварительного приема имя файла должно быть
pre-receive
без расширения.
- Сделайте файл с файлом крючка исполняемым и убедитесь, что он принадлежит git.
- Напишите код, чтобы сделать функцию 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