git post-receive 후크에서 "명령을 찾을 수 없음" 오류가 발생하지만 제대로 실행되는 것 같고 수동으로 실행하면 오류가 없습니다.

git post-receive 후크에서 "명령을 찾을 수 없음" 오류가 발생하지만 제대로 실행되는 것 같고 수동으로 실행하면 오류가 없습니다.

스테이징 서버에서 git pull을 트리거하기 위해 gitolite로 설정된 중앙 git 저장소에서 실행되는 수신 후 후크가 있습니다. 제대로 작동하는 것 같지만 실행 시 "명령을 찾을 수 없음" 오류가 발생합니다. 오류의 원인을 추적하려고 시도하고 있지만 운이 없었습니다. 동일한 명령을 수동으로 실행해도 오류가 발생하지 않습니다.

중앙 저장소에 푸시되는 커밋에서 수행된 작업에 따라 오류가 변경됩니다. 예를 들어 'git rm'이 커밋되어 중앙 저장소에 푸시된 경우 오류 메시지는 "remote: Hooks/post-receive: line 16: Removed: command notfound"가 되며 'git add'가 커밋되어 중앙 저장소에 푸시된 경우 중앙 저장소에서 오류 메시지는 "remote:hooks/post-receive: line 16: Merge: command notfound"입니다. 두 경우 모두 스테이징 서버에서 실행되는 'git pull'은 오류 메시지에도 불구하고 올바르게 작동합니다.

다음은 수신 후 스크립트입니다.

#!/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!"

스테이징 서버에서 git pull을 수행하는 명령은 ssh 사용자의 ~/.ssh/authorized_keys 파일에 있으며 다음과 같습니다.

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)

이것은 내 로컬 저장소에서 파일을 제거하고 로컬로 커밋한 후 중앙 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$

보시다시피 수신 후 스크립트가 해당 echo "Done!"라인에 도달하고 스테이징 서버를 보면 git pull성공적으로 실행되었지만 여전히 잔소리하는 오류 메시지가 있습니다.

오류 메시지의 출처를 찾을 수 있는 위치에 대한 제안을 주시면 대단히 감사하겠습니다. stderr를 /dev/null로 리디렉션하고 싶지만 문제가 무엇인지 알고 싶습니다.

답변1

PATH가 정상적인 것으로 설정되지 않은 상태에서 후크가 실행 중일 수 있습니다. 에 대한 전체 경로를 사용해 보셨나요 ssh? 그렇지 않으면 스크립트가 실행될 때 환경 변수를 살펴보세요. '내보내기'를 사용하여 목록을 덤프할 수 있지만 아마도 귀하가 생각하는 것과는 다를 수 있습니다.

관련 정보