Пользовательский файл пост-получения с использованием GitLab
Я пытаюсь заменить свой хук после получения, автоматически сгенерированный GitLab, на новый файл, который включает поддержку почты и, следовательно, должен вызывать «пост-получение».
Это предыдущая версия моего файла:
#!/usr/bin/env bash
# This file was placed here by GitLab. It makes sure that your pushed commits
# will be processed properly.
while read oldrev newrev ref
do
# For every branch or tag that was pushed, create a Resque job in redis.
repo_path=`pwd`
env -i redis-cli rpush "resque:gitlab:queue:post_receive" "{\"class\":\"PostRe
ceive\",\"args\":[\"$repo_path\",\"$oldrev\",\"$newrev\",\"$ref\",\"$GL_USER\"]}
" > /dev/null 2>&1
done
Когда я заменяю этот файл новым, который включает в себя вышеупомянутые строки в конце файла, GitLab говорит: «Проект имеет недопустимый файл после получения» в области администратора, но электронные письма отправляются правильно.
Знаете ли вы, как справиться с этой проблемой множественной пост-получения поддержки. На данный момент я не знаю, правильно ли выполняется часть файла, относящаяся к gitlab.
Спасибо за помощь!
Обновить:Сценарии внутри папок теперь вызываются с помощью нижеприведенного решения (запрос на извлечение). Но я не понимаю, почему стандартный сценарий "post-receive-email" не отправляет письма, если он включен в каталог. Он отлично работает, если он вызывается непосредственно после получения.
Не знаю, почему я должен изменить порядок, но у меня работает следующее (даже я не знаю, правильно ли сейчас создаются задания Resque:
#!/usr/bin/env bash
repo_path=`pwd`
if [ -d hooks/post-receive.secondary.d ]; then
for i in hooks/post-receive.secondary.d/*
do
[ -x "$i" ] || continue
# call the hooklet with the same arguments we got
path=$repo_path"/"$i
"$path" "$@" || {
# hooklet failed; we need to log it...
echo hooklet $i failed
perl -I$GL_BINDIR -Mgitolite -e "log_it('hooklet $i failed')"
# ...and send back some non-zero exit code ;-)
exit 1
}
done
fi
while read oldrev newrev ref
do
# For every branch or tag that was pushed, create a Resque job in redis.
env -i redis-cli rpush "resque:gitlab:queue:post_receive" "{\"class\":\"PostReceive\",\"args\":[\"$repo_path\",\"$oldrev\",\"$newrev\",\"$ref\",\"$GL_USER\"]}" > /dev/null 2>&1
done
exit 0