git post-receive hook выдает ошибку «команда не найдена», но, похоже, работает правильно и без ошибок при ручном запуске

git post-receive hook выдает ошибку «команда не найдена», но, похоже, работает правильно и без ошибок при ручном запуске

У меня есть post-receive hook, который работает в центральном репозитории git, настроенном с помощью gitolite, чтобы вызвать git pull на промежуточном сервере. Он, кажется, работает правильно, но при запуске выдает ошибку "command not found". Я пытаюсь отследить источник ошибки, но безуспешно. Запуск тех же команд вручную не приводит к ошибке.

Ошибка меняется в зависимости от того, что было сделано в коммите, который отправляется в центральный репозиторий. Например, если 'git rm ' был отправлен и отправлен в центральный репозиторий, сообщение об ошибке будет "remote: hooks/post-receive: line 16: Removed: command not found", а если 'git add ' был отправлен и отправлен в центральный репозиторий, сообщение об ошибке будет "remote: hooks/post-receive: line 16: Merge: command not found". В любом случае запуск '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/authorized_keys пользователя ssh и выглядит следующим образом:

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? В противном случае, взгляните на переменные окружения, когда ваш скрипт работает. Вы можете использовать 'export', чтобы выгрузить их список, они, вероятно, не будут такими, как вы думаете.

Связанный контент