web-dev-qa-db-ja.com

GitフックでSudoを使用して、デプロイ後に権限を設定する

Ubuntuでいくつかのサイトを実行し、次のように新しいデプロイワーフローを設定しています(例ではステージング環境を使用しています)。

私の開発マシンでは、_git Push staging_を実行します。これにより、ベアリポジトリにプッシュされ、_post-receive_フックがトリガーされます。これにより、次のことが実行されます。

  • 別のフォルダでプロジェクトをチェックアウトする
  • 現在デプロイされているディレクトリをバックアップします
  • Rsyncでファイルをデプロイします
  • _post_deploy.sh_スクリプトを使用して適切な権限を設定します

上記は、権限設定部分を除いて、正常に機能しています。

Sudochgrpを実行するには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を読んだところ、コマンドライン用ではありません(私は正しいですか?)。

2
Schrute

これは、次のエントリがある/ 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回実行して、既知のホストにエントリを追加する必要があります(または、これを無視する引数を見つけます)。

2
geedoubleya