Niestandardowy plik po otrzymaniu za pomocą GitLab
Próbuję zastąpić mój hak po otrzymaniu, automatycznie wygenerowany przez GitLab przez nowy plik, który umożliwia obsługę poczty, a zatem musi zostać wywołany „po otrzymaniu”.
To jest poprzednia wersja mojego pliku:
#!/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
Kiedy zastępuję ten plik nowym, który zawiera wspomniane powyżej linie na końcu pliku, GitLab mówi: „Projekt ma nieprawidłowy plik po otrzymaniu” w obszarze administratora, ale wiadomości e-mail są poprawnie wysyłane.
Czy wiesz, jak poradzić sobie z tym problemem wielokrotnego wsparcia po otrzymaniu. W tej chwili nie wiem, czy konkretna część pliku gitlab jest poprawnie wykonana.
Dzięki za pomoc!
Aktualizacja:Skrypty w folderach są teraz wywoływane przy użyciu poniższego rozwiązania (żądanie ściągnięcia). Ale nie rozumiem, dlaczego standardowy „post-receive-email” -script nie wysyła żadnych maili, jeśli są one zawarte w katalogu. Działa dobrze, jeśli jest wywoływany bezpośrednio jako post-receive.
Nie wiem, dlaczego muszę zmienić kolejność, ale dla mnie działają następujące rzeczy (nawet nie wiem, czy zadania resque są teraz prawidłowo tworzone:
#!/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