git post-receive hook lança o erro “command not found” mas parece rodar corretamente e nenhum erro quando executado manualmente

2

Eu tenho um gancho de pós-recebimento que é executado em um repositório git central configurado com o gitolite para acionar um git pull em um servidor de armazenamento temporário. Parece funcionar corretamente, mas lança um erro "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 um 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 o repo central da mensagem de erro será "remote: hooks / post-receive: linha 16: Merge: comando not found". Em ambos os casos, a execução do 'git pull' no servidor de teste funciona corretamente, apesar da mensagem de erro.

Aqui está o script de 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 intermediário 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)

Esta é a saída real da remoção de um arquivo do repositório local, comprometendo-o localmente e enviando-o para o repositório central do git:

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 de pós-recebimento chega à linha echo "Done!" e quando olho no servidor de teste, o git pull foi executado com êxito, mas ainda há essa mensagem de erro irritante.

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

    
por Ben 21.12.2010 / 22:03

1 resposta

2

O gancho pode estar em execução sem o PATH configurado para algo sensato. Você tentou usar o caminho completo para ssh ? Caso contrário, observe as variáveis de ambiente quando seu script é executado. Você pode usar 'export' para despejar uma lista deles, eles provavelmente não serão o que você pensa.

    
por 22.12.2010 / 03:08

Tags