web-dev-qa-db-ja.com

MSBuildは統合認証または基本認証のみを使用して展開できますか?

MSBuildコマンドラインからIIS6のMSDepSvcにWebアプリパッケージを展開しています。IIS6は、基本認証を使用する次のコマンドで正常に動作しています。

MSBuild.exe Web.csproj
  /p:Configuration=Debug
  /p:DeployOnBuild=True
  /p:DeployTarget=MSDeployPublish
  /p:MsDeployServiceUrl=http://[server name]/MsDeployAgentService
  /p:DeployIisAppPath=DeploymentTestProject
  /p:MSDeployPublishMethod=RemoteAgent
  /p:CreatePackageOnPublish=True
  /p:username=***
  /p:password=***

ただし、私が本当にやりたいのは、ユーザー名とパスワードのパラメーターを削除し、現在のユーザーのIDで統合認証にフォールバックすることです。このコマンドはビルドサーバーに入り、ターゲット環境での管理者権限を持つアカウントのプレーンテキストの資格情報(MsDepSvcに必要)を表示しないようにします。これを行う方法に関するドキュメントが見つからず、公開しようとすると、資格情報をドロップすると401が不正に返されます。

特に苛立たしいのは、authを統合したパッケージでdeployコマンドを喜んで実行できることです(資格情報を含めないでください)。MSBuildコマンドラインからは実行できないようです。ビルドファイルを編集せずに、パッケージとデプロイプロセスを1つのコマンドにカプセル化しようとしています。これが現在のところ唯一の方法です。

何かアイデアはありますか?

編集 Sayedと少し話し合い、コマンドライン出力を少し詳しく調べた後、上記のMSBuildコマンド(ユーザー名とパスワードのパラメーターなし)を実行した後、次のMSDeployコマンドが呼び出されます。

msdeploy.exe
  -source:package='[project path]\Web\obj\Debug\Package\Web.Zip' 
  -dest:auto,ComputerName='http://[server]/MsDeployAgentService',UserName='***',IncludeAcls='False',AuthType='NTLM'
  -verb:sync
  -disableLink:AppPoolExtension
  -disableLink:ContentExtension
  -disableLink:CertificateExtension
  -retryAttempts=2

UserName属性が設定され、値が現在ログオンしているユーザーのユーザー名であることがわかります。これを取り出して上記のコマンドを直接実行すると、デプロイメントは問題なく完了します。

それで、元のMSBuildコマンドがMSDeployを呼び出すときにUserName属性を挿入するのはなぜですか?これが現在唯一の障壁のようです。

36
Troy Hunt

そして答えは...

元のMSBuild呼び出しで渡されなかった場合でも、MSDeployコマンドに保持される現在のIDのユーザー名に関する上記の編集に従って、次のようにパラメーターを再構築して空のユーザー名を渡しました。

MSBuild.exe Web.csproj
  /p:Configuration=Debug
  /p:DeployOnBuild=True
  /p:DeployTarget=MSDeployPublish
  /p:MsDeployServiceUrl=http://[server name]/MsDeployAgentService
  /p:DeployIisAppPath=DeploymentTestProject
  /p:MSDeployPublishMethod=RemoteAgent
  /p:CreatePackageOnPublish=True
  /p:username=

これにより、次のMSDeployコマンドが生成されます。

msdeploy.exe 
  -source:package='[project path]\obj\Debug\Package\Web.Zip' 
  -dest:auto,ComputerName='http://[server name]/MsDeployAgentService',IncludeAcls='False',AuthType='NTLM' 
  -verb:sync 
  -disableLink:AppPoolExtension 
  -disableLink:ContentExtension 
  -disableLink:CertificateExtension 
  -retryAttempts=2

この呼び出しには、UserName属性は含まれなくなりました。つまり、MSBuild呼び出しにユーザー名パラメーターを追加しないと、とにかく現在のIDが挿入され、パスワードがないために失敗する基本認証が遅延します。ユーザー名パラメーターを含めても値を指定しない場合、MSDeployコマンドには含まれません。

31
Troy Hunt

Microsoft.Web.Publishing.targetsを調べて、これを確認しました。

<PropertyGroup>
  <NormalizePublishSettings ...>
  <AuthType Condition="'$(AuthType)'==''" >Basic</AuthType>
  <!--Supported value for $(MSDeployPublishMethod): WMSVC, RemoteAgent, InProc-->
  <MSDeployPublishMethod ... >WMSVC</MSDeployPublishMethod>
  ...
</PropertyGroup>

したがって、MSBuildから実行する場合、デフォルトはBasic認証であるように見えます。次に、これを見つけました http://technet.Microsoft.com/de-de/library/dd569001(WS.10).aspx

authenticationTypeは、使用する認証のタイプを指定します。可能な値はNTLMとBasicです。 wmsvcプロバイダー設定が指定されている場合、デフォルトの認証タイプは基本です。それ以外の場合、デフォルトの認証タイプはNTLMです。

まだ試していませんが、/p:AuthType=NTLMのようなものかもしれません

4
Mike Valenty

プロセスを2つのステップに分割すると、うまくいきました-

  1. ビルドとパッケージ

    msbuild.exe/p:DeployOnBuild = True/p:WebPublishMethod = Package/p:PackageAsASingleFile = true/p:AllowUntrustedCertificate = True/p:CreatePackageOnPublish = True/p:SkipExtraFilesOnServer = True/p:PublishProfile = DevProfile/p:Configuration =開発者

  2. 配置する

    msdeploy.exe -source:package = 'C:\ packagelocation\dev.Zip' -dest:auto、ComputerName = ' http:// destinationserver/MsDeployAgentService '、IncludeAcls = 'False'、AuthType = 'NTLM' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -retryAttempts = 2

0
BlabzX

[サーバー名]の管理者特権を持つアカウントでサービスが実行されている場合、NTLMを次のように機能させることができました。

"C:\ Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" app\Test.Web\Test.Web.csproj/T:Clean/T:Package/P:Configuration = Release

C:\ hudson\jobs\Test\workspace\app\Test.Web\obj\Release\Package\Test.Web.deploy.cmd/Y "/ M:http:// [サーバー名]/MSDEPLOYAGENTSERVICE"/A: ntlm -allowUntrusted

生成されるもの:

"C:\ Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -source:package = 'C:\ hudson\jobs\Test\workspace\app\Test.Web\obj\Release\Package\Test.Web。 Zip '-dest:auto、computerName =' http:// [サーバー名]/MSDEPLOYAGENTSERVICE '、authtype =' ntlm '、includeAcls =' False '-verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension- setParamFile: "C:\ hudson\jobs\Test\workspace\app\Test.Web\obj\Release\Package\RapidPrototypeRequestSystem.Web.SetParameters.xml" -allowUntrusted

0
Mark