msdeploy.exe において wmsvc (IIS の Web Management Service / IIS管理サービス) 経由でアクセスするようにしてみた。
前提条件としては以下のような状況がある。
- 配置先のマシンと異なるドメインに属しているマシンからデプロイしたかった。すなわちKerberosによる統合認証が使えなかった。
- 自動ビルドで配置パッケージが特定の共有フォルダに作成される。このためVisualStudio のGUIは利用できなかった。
準備として、デプロイ先となるIISマシンで
- Web サーバー(IIS) の役割に、「管理ツール – 管理サービス」役割サービスを追加
- Web Deploy v2.0 をインストールする。インストール時に IIS 7 Deployment Handler を有効にする。(IIS 管理サービスがインストールされていない時にはメニューに出てこない。)
デプロイする側にも Web Deploy v2.0 をインストールしておく。その上で次のようなバッチファイルを作成し、自動ビルドで出来上がった zip パッケージをドロップするとデプロイされるようになった。(バッチファイルは、VisualStudio2010 において「配置パッケージの作成」を行うと、サンプルとなるコマンドを作ってくれるのでそれを参考にした)
@ECHO OFF SET logfile="%TEMP%\msdeploy_log.txt" DATE /T >> %logfile% TIME /T >> %logfile% "C:\Program Files\IIS\Microsoft Web Deploy V2\\msdeploy.exe" ^ -verb:sync ^ -dest:auto,wmsvc=devmachine01.example.com,includeAcls='False',username=webdeploy,password=******** ^ -source:package='%1' ^ -disableLink:AppPoolExtension ^ -disableLink:ContentExtension ^ -disableLink:CertificateExtension ^ -skip:objectname='dirPath',absolutepath='obj\\SampleApp\\Package\\PackageTmp\\App_Data$' ^ -setParam:"IIS Web Application Name"="SampleApp/" ^ -retryAttempts=2 ^ -allowUntrusted ^ -debug >> %logfile% TYPE %logfile%
参考: Web Deployment Agent Service に対して明示的に統合認証(NTLM) を利用する場合msdeploy.exe で –authType=’NTLM’ を追加する。msbuild を利用する場合には username に空文字を渡すと自動的にそのようにしてくれるという例: http://stackoverflow.com/questions/4210379/can-msbuild-deploy-using-integrated-authentication-or-only-basic
(未検証) NTLM統合認証が直接使えなくても、explorer による共有フォルダアクセス等ではローカルログインアカウントのユーザ名とパスワードを取り出して自動的に送信してくれるのだが、 msdeploy.exe はそこまでやってくれないようだった。
http://technet.microsoft.com/ja-jp/library/dd569093.aspx 単にパスワードの暗号化をするだけであれば Web Deployment Agent Service のサービスをSSLで受け入れるようにする方がよい。今回はどこかで統合認証が使えるパターンが無いかを探ったのだが、ActiveDirectory による信頼関係のない状況ではそこまで到達できなかった。
Web Deployment Agent Service は http によるアクセスで、パスワードが平文かもしれないが、authType が NTLM だとするとそうでないかもしれない。とはいえ確信は持てないので SSL 接続の方が嬉しい。