Несколько перехватчиков git post-receive

я использую Гитлаб. Gitlab создает следующую ссылку для распространения одних и тех же хуков по всем репозиториям.

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

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

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


person mat1010    schedule 13.11.2015    source источник


Ответы (1)


Gitlab поддерживает хуки проекта в каталоге $GIT_DIR/custom_hooks.

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

С вышеуказанной веб-страницы:

Обычно git-хуки размещаются в репозитории или в каталоге хуков проекта. GitLab создает символическую ссылку из каталога hooks каждого проекта на каталог hooks 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 создайте файл с именем, соответствующим типу хука. Для хука перед получением имя файла должно быть pre-receive без расширения.
  5. Сделайте исполняемый файл ловушки и убедитесь, что он принадлежит git.
  6. Напишите код, чтобы git hook работал как положено. Хуки могут быть на любом языке. Убедитесь, что «шебанг» вверху правильно отражает тип языка. Например, если сценарий написан на Ruby, шебанг, вероятно, будет #!/usr/bin/env ruby.

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

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

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

#!/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
person cfi    schedule 30.11.2015