サーバー上にある中央の git リポジトリへのプッシュが、Windows Server 2012 上の IIS 8 を介して実行されているサイト フォルダーに変更を自動的にプッシュするセットアップを作成しています。
これは簡単です。以下は機能しています。IIS上で独自に実行されているサイトであるBonobo Git Serverがあります。Bonobo によって管理されている中央リポジトリに post-receive フックがあります。次に、このフックは、変更をサイトのフォルダーのリポジトリにプルするバッチ ファイルを実行します。これが可能になったのは、当然のことながら、受信後フックが Bonobo のアプリ プール、つまり「IIS AppPool\GitServerAppPool」に割り当てられた ID として実行され、その ID にサイトのフォルダーに対する変更権限を与えたためです。
したがって、コードはうまくプッシュおよびプルされます。問題は、プロジェクトが Python でコーディングされており、ISAPI_WSGI を使用して IIS に統合されているため、アプリケーション プールをリサイクルせずにコードをリロードするメカニズムがないことです。
受信後スクリプトにアプリケーション プールをリサイクルする権限を与えることは困難であることがわかっています。
というわけで、問題はこれです。-受信後スクリプトは「IIS AppPool\GitServerAppPool」として実行されているため、管理者アカウントが必要なため、他のアプリ プールを再起動できません。- appcmd またはスケジュールされたタスクを実行するための RunAs の使用は、UAC を渡すためにパスワードの入力が必要になるため、機能しません。- 最初にパスワードを入力するために AppPoolIdentity としてログインできないため、runas で /savecreds を使用しても機能しません。
そして、私は立ち往生しています。次のいずれかが何らかの形で可能な場合、それらは機能するはずですが、それらを実行する方法が見つかりません.
- アプリ プールをリサイクルするために必要なアクセス許可を下げる何らかの方法。
- runas コマンドにパスワードを含める何らかの方法 (スクリプトは外部からアクセスできないため、これで問題ありません)
- コマンドを GitServerAppPool として手動で実行して、/savecreds を使用してバッチ ファイルを 1 回実行し、パスワードを再度入力する必要がないようにする方法
a、b、またはcの方法を知っている人、または別の解決策がある人はいますか?
機能する解決策の 1 つは、管理者アカウントとして実行されているアプリ プールで git サーバーを実行することです。ただし、IIS セキュリティに関する 1 つのルールを回避するために完全な管理者アクセス権を与え始めるのは、UAC の要点に反しているように思えます。もちろん、必要ならそうします。
助けや提案をありがとうございました。
ところで、これを行う理由は、世界中に散らばっている他の開発者に、私の干渉やサーバーへの実際のアクセスなしに、変更をステージング サーバーに直接プッシュできるようにするためです。そのため、アプリ プールを手動で再起動すると、目的が無効になります。