Arquivo pós-recebimento personalizado usando o GitLab
Eu estou tentando substituir meu gancho pós-recebimento, gerado automaticamente pelo GitLab por um novo arquivo que permite o suporte de email e, portanto, tem que ser acionado "post recebimento".
Esta é a versão anterior do meu arquivo:
#!/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
Quando eu substituir esse arquivo por um novo que inclui as linhas acima mencionadas no final do arquivo, o GitLab diz: "O projeto tem um arquivo de recebimento de mensagens inválido" na área de administração, mas os emails são enviados corretamente.
Você sabe como lidar com esse problema de vários apoios pós-recebimento? No momento, não sei se a parte específica do arquivo do gitlab foi executada corretamente.
Obrigado pela ajuda!
Atualizar:Os scripts dentro das pastas são invocados agora usando a solução abaixo mencionada (solicitação pull). Mas eu não entendo porque o padrão "post-receive-email" -script não envia nenhum email se estiver incluído no diretório. Ele funciona bem se for chamado diretamente como pós-recebimento.
Não sei porque eu tenho que mudar a ordem, mas o seguinte funciona para mim (mesmo eu não sei se os trabalhos de resque agora são criados corretamente:
#!/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