Разработчик пишет код, коммитит, пушит в GitHub… И для некоторых задач весьма хочется, чтобы эти изменения сразу появлялись на нашем тестовом сервере. Т.е. по сути нам нужно, чтобы при комитте происходил автоматический вызов команды ‘git pull’ на тестовом сервере.
В сети есть несколько решений тому, как эту функциональность реализовать. Свой выбор становил на скрипте «Github Auto Pull«, который умеет еще отправлять алерты на указанную почту. Все бы ничего, но я столкнулся с проблемой — строчка shell_exec('git pull')
ни как не хотела правильно выполняться. Стоит оговориться, что мне пришлось изменить строку вызова команды на следующую: shell_exec('cd /path-to-git-project && git checkout %branch% && git pull');
И так, я начал искать причину проблемы. Для начала попытался выполнить скрипт через CLI, оставив в нем лишь строчку с shell_exec:
php github.php — так все работает
Хм, следующее, что пришло на ум, это возможная проблема с пользователем, которому принадлежит скрипт (мол, выполнять команды в shell-оболочке запрещено). Переключился на этого пользователя, вновь запустил «php github.php» и что вижу:
Could not create directory '/var/www/.ssh'. The authenticity of host 'github.com (192.30.252.128)' can't be established. RSA key fingerprint is 15:27:ac:a5:76:29:2d:36:63:1b:56:1d:eb:da:a6:58. Are you sure you want to continue connecting (yes/no)? yes Failed to add the host to the list of known hosts (/var/www/.ssh/known_hosts). Permission denied (publickey). fatal: The remote end hung up unexpectedly
Т.е. проблема была в том, что осуществлялась попытка установить RSA-ключ, в несуществующую для этого пользователя директорию. Создал директорию, скопировал содержимое из /root/.ssh и все заработало.
Еще одна победа!