Я выполняю несколько сайтов на Ubuntu, и я настраиваю новое, развертывают worflow следующим образом (пример использует среду подготовки):
На моей dev машине я делаю git push staging
который продвигает в пустой репозиторий и инициировал post-receive
рычаг, которые делают эти вещи:
post_deploy.sh
сценарийВышеупомянутое хорошо работает, кроме полномочий, устанавливающих часть.
Так как я должен использовать sudo
сделать a 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
сценарий от рычага мерзавца? Я не возражаю иметь необходимость ввести дополнительный пароль, но от того, что я считал, askpass вещь не для командной строки (действительно ли я прав?).
Это проблема с файлом /etc/sudoers, в котором есть следующая запись:
Requaults requiretty
Он подробно описан в ЭТОМ ПОСТ
Есть два варианта, прокомментируйте установку Defaults requiretty
в файле /etc/sudoers или используйте псевдо-тройку (-t
) аргумента для ssh
.
Попробуйте следующее в вашем пост-приемном скрипте:
ssh -t 127.0.0.1 "sudo chown user /path/to/pushfile"
Хотя вы должны настроить ssh
pre-shared ключи и запустить его один раз вручную, чтобы добавить запись на известные хосты (или найти аргумент, чтобы проигнорировать это).