git post-receive hook выдает ошибку "команда не найдена", но, кажется, работает правильно и без ошибок при запуске вручную
У меня есть перехват после получения, который запускается в центральном репозитории git, настроенном с помощью gitolite, для запуска git pull на промежуточном сервере. Кажется, что он работает правильно, но выдает ошибку "команда не найдена" при запуске. Я пытаюсь найти источник ошибки, но мне не повезло. Выполнение тех же команд вручную не приводит к ошибке.
Ошибка изменяется в зависимости от того, что было сделано в коммите, который передается в центральное хранилище. Например, если "git rm" был зафиксирован и отправлен в центральное хранилище, сообщение об ошибке будет "remote: hooks/post-receive: строка 16: Удалено: команда не найдена", а если "git add" было зафиксировано и отправлено в в центральном репозитории сообщение об ошибке будет "удаленный: перехват / пост-получение: строка 16: слияние: команда не найдена". В любом случае, запуск 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 gitolite@thejibe.com:testing
remote: aa72ad9..bb96e13 master -> origin/master
remote: hooks/post-receive: line 16: Removed: command not found # The error msg
remote: Done!
To gitolite@thejibe.com:testing
aa72ad9..bb96e13 master -> master
ben@tamarack:~/thejibe/testing/web$
Как вы можете видеть, скрипт пост-получения попадает в echo "Done!"
линия и когда я смотрю на промежуточный сервер git pull
был успешно запущен, но по-прежнему появляется ноющее сообщение об ошибке.
Будем весьма благодарны за любые предложения о том, где искать источник сообщения об ошибке. Я испытываю желание перенаправить stderr в /dev/null, но предпочел бы знать, в чем проблема.
1 ответ
Крюк может работать без установки PATH на что-то вменяемое. Вы пытались использовать полный путь к ssh
? В противном случае, посмотрите на переменные окружения, когда ваш скрипт выполняется. Вы можете использовать "экспорт", чтобы вывести их список, вероятно, они не будут такими, как вы думаете.