O gancho pós-recebimento do git gera o erro "comando não encontrado", mas parece funcionar corretamente e sem erros quando executado manualmente

O gancho pós-recebimento do git gera o erro "comando não encontrado", mas parece funcionar corretamente e sem erros quando executado manualmente

Eu tenho um gancho pós-recebimento que é executado em um repositório git central configurado com gitolite para acionar um git pull em um servidor de teste. Parece funcionar corretamente, mas gera um erro de "comando não encontrado" quando é executado. Estou tentando rastrear a origem do erro, mas não tive sorte. Executar os mesmos comandos manualmente não produz erro.

O erro muda dependendo do que foi feito no commit que está sendo enviado para o repositório central. Por exemplo, se 'git rm' foi confirmado e enviado para o repositório central, a mensagem de erro será "remote: hooks/post-receive: linha 16: Removido: comando não encontrado" e se 'git add' foi confirmado e enviado para no repositório central, a mensagem de erro será "remote: hooks/post-receive: line 16: Merge: command not found". Em ambos os casos, o 'git pull' executado no servidor temporário funciona corretamente, apesar da mensagem de erro.

Aqui está o script pós-recebimento:

#!/bin/bash
#
# This script is triggered by a push to the local git repository.  It will
# ssh into a remote server and perform a git pull.
#
# The SSH_USER must be able to log into the remote server with a
# passphrase-less SSH key *AND* be able to do a git pull without a passphrase.
#
# The command to actually perform the pull request on the remost server comes
# from the ~/.ssh/authorized_keys file on the REMOTE_HOST and is triggered
# by the ssh login. 

SSH_USER="remoteuser"
REMOTE_HOST="staging.server.com"

`ssh $SSH_USER@$REMOTE_HOST` # This is line 16

echo "Done!"

O comando que faz o git pull no servidor de teste está no arquivo ~/.ssh/authorized_keys do usuário ssh e é:

command="cd /var/www/staging_site; git pull",no-port-forwarding,no-X11-forwarding,no-agent-forwarding, ssh-rsa AAAAB3NzaC1yc2EAAAABIwAA... (the rest of the public key)

Este é o resultado real da remoção de um arquivo do meu repositório local, do commit local e do envio para o repositório git central:

ben@tamarack:~/thejibe/testing/web$ git rm ./testing
rm 'testing'
ben@tamarack:~/thejibe/testing/web$ git commit -a -m "Remove testing file"
[master bb96e13] Remove testing file
1 files changed, 0 insertions(+), 5 deletions(-)
delete mode 100644 testing
ben@tamarack:~/thejibe/testing/web$ git push 
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 221 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: From [email protected]:testing
remote:    aa72ad9..bb96e13  master     -> origin/master
remote: hooks/post-receive: line 16: Removed: command not found # The error msg
remote: Done!
To [email protected]:testing
aa72ad9..bb96e13  master -> master
ben@tamarack:~/thejibe/testing/web$

Como você pode ver, o script pós-recebimento chega à echo "Done!"linha e, quando olho no servidor de teste, ele git pullfoi executado com êxito, mas ainda há aquela mensagem de erro incômoda.

Qualquer sugestão sobre onde procurar a origem da mensagem de erro será muito apreciada. Estou tentado a redirecionar o stderr para /dev/null, mas prefiro saber qual é o problema.

Responder1

O gancho pode estar rodando sem PATH definido como algo sensato. Você já tentou usar o caminho completo para ssh? Caso contrário, dê uma olhada nas variáveis ​​de ambiente quando seu script for executado. Você pode usar 'exportar' para despejar uma lista deles, provavelmente não serão o que você pensa.

informação relacionada