38

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

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 無許可が返されます。

特にイライラするのは、統合された認証を使用してパッケージで展開コマンドを問題なく実行できることです (資格情報を含めないでください)。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 属性を挿入するのはなぜですか? これが現在唯一の障壁のようです。

4

5 に答える 5

34

そして答えは...

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

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 コマンドにはまったく含まれません。

于 2010-11-19T02:13:38.047 に答える
4

Microsoft.Web.Publishing.targets を調べたところ、次のことがわかりました。

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

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

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

まだ試していませんが、多分こんな感じです。/p:AuthType=NTLM

于 2010-11-18T05:48:18.563 に答える
1

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

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" app\Test.Web\Test.Web.csproj /T:クリーン /T:パッケージ /P:構成=リリース

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

于 2012-07-02T15:16:46.853 に答える
0

これはうまくいきました。最初はターゲットファイルに気を取られていましたが、エラーが接続文字列にあることに気付きました。つまり、http の代わりに https を使用しようとしていたのです。

MSBuild.exe Web.csproj /p:Configuration=Debug /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MsDeployServiceUrl=http://[serverName]/MsDeployAgentService /p:DeployIisAppPath=DeploymentTestProject /p:MSDeployPublishMethod=RemoteAgent /p:CreatePackageOnPublish=True /p:ユーザー名=

于 2012-07-08T22:04:49.550 に答える