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
_を実行しても、問題はありません。
Gitフックから_post_deploy.sh
_スクリプトを実行するにはどうすればよいですか?追加のパスワードを入力する必要はありませんが、askpassを読んだところ、コマンドライン用ではありません(私は正しいですか?)。
これは、次のエントリがある/ etc/sudoersファイルの問題です。
Defaults requiretty
詳細は この投稿
2つのオプションがあります。/etc/sudoersからDefaults requiretty
設定をコメントアウトするか、ssh
に疑似tty割り当て(-t
)引数を使用します。
受信後のスクリプトで次のことを試してください。
ssh -t 127.0.0.1 "Sudo chown user /path/to/pushfile"
ただし、ssh
事前共有キーを自分で構成し、手動で1回実行して、既知のホストにエントリを追加する必要があります(または、これを無視する引数を見つけます)。