Я запускаю несколько сайтов на Ubuntu и настраиваю новый рабочий процесс развертывания следующим образом (в примере используется промежуточная среда):
На моей машине разработчика я делаю git push staging
который отправляет в пустой репозиторий и запускает post-receive
крючок, который выполняет следующие действия:
post_deploy.sh
сценарийВышеуказанное работает нормально, за исключением части настройки разрешений.
Поскольку мне нужно использовать sudo
сделать chgrp
и chown
, Я попытался добавить в /etc/sudoers
:
myusername ALL=(ALL:ALL) NOPASSWD: /path/to/post_deploy.sh
Но при выполнении git push
Я получаю такую ошибку:
remote: sudo: no tty present and no askpass program specified
Если я сбегу post_deploy.sh
прямо с развернутого сервера у меня проблем нет.
Как я могу запустить post_deploy.sh
скрипт из хука git? Я не против ввести дополнительный пароль, но, судя по тому, что я прочитал, askpass не для командной строки (я прав?).
Это проблема с файлом / etc / sudoers, в котором есть следующая запись:
Defaults requiretty
Подробно в ЭТА ПОЧТА
Есть два варианта, закомментируйте Defaults requiretty
настройки из / etc / sudoers или используйте выделение псевдо-tty (-t
) аргумент в пользу ssh
.
Попробуйте сделать следующее в своем сценарии после получения:
ssh -t 127.0.0.1 "sudo chown user /path/to/pushfile"
Хотя вам придется ssh
предварительно настроенные общие ключи и запускайте его один раз вручную, чтобы добавить запись к известным хостам (или найдите аргумент, чтобы игнорировать это).