2010-11-17 16 views
33

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

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。

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

編集 いくつかのサイードとの協議・上記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属性が設定されていて、値が現在ログオンしているユーザーのユーザー名であることがわかります。私がこれを取り出して上記のコマンドを直接実行すると、展開はうまくいきます。

したがって、MSDuployを呼び出すときに元のMSBuildコマンドがUserName属性を挿入するのはなぜですか?これは唯一の障壁であるように思われる。

+0

UseMSDeployExeをtrueに設定すると、AuthType = NTLM ??? –

+0

実際、Visual Studioから同じドメイン上の別のマシンにパブリッシュするときに問題が発生します。既にログオンしている資格情報を入力すると、公開は正常に行われ、基になるMSBuildコマンドはAuthType = 'NTLM'を表示しますが、自分の資格情報も含めます。だから私は元のコマンドに戻っています! –

+0

Visual Studio 2012の場合は、/ P:UserNameプロパティを完全に省略する必要があります。 – bmavity

答えて

27

のようなものだと答えが...

現在のIDのユーザー名は、元のMSBuildの呼び出しで渡されていない、私は次のように空のユーザ名を渡すパラメータを再構築しようとした場合でも、場合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が挿入され、パスワードがないため失敗する基本認証に遅延します。 usernameパラメータをインクルードしても値を与えないと、MSDeployコマンドにはその値はまったく含まれません。

+0

これを行うにはWeb公開GUIダイアログを表示する方法はありますか? msdeploy.exeコマンドを生成する前に資格情報の入力を促すように思われるので、常にAuthTypeをBasicに設定します。 –

+0

Yadynを解決する簡単な方法があります。挑戦を受けたときに資格情報を入力せずに "Enter"を押すだけです。簡単に:) –

+0

Hm、それを試み、UseMsDeployExe = trueを使用しているとき、それは間違いなくユーザー名/パスワードのパラメータ(最終的に)を離れることがわかりますが、まだAuthTypeをBasicに設定しています。これはWMSvcアドレス(MsDeploy.axd)を使用している場合です...また、何も入力せずに[OK]をクリックすると直感的なことはしません。 –

3

私はMicrosoft.Web.Publishing.targetsに見て、これを見た:MSBuildのから実行している場合、デフォルトはBasic認証があるよう

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

だから、それが見えます。それから私は、このhttp://technet.microsoft.com/de-de/library/dd569001(WS.10).aspx

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

私はまだ試していませんが、多分それは/p:AuthType=NTLM

+0

良い発見ですが、それは私が観察しているものと一貫していません。私がこの声明を読んだのは、MsDepSvc(つまりWMSvcではない)に対して展開することです.NTLMはデフォルトで発生するはずです。私は確かにNTLMでAuthTypeスイッチを試しましたが、運はありません。 –

+0

ビルドターゲットがAuthTypeの独自の既定値を指定することで、MSDeployの既定の動作をオーバーライドしていると考えていました。それはちょうど推測だった。 –

0

[server name]の管理者権限を持つアカウントでサービスが実行されている場合、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" /:NTLMは

を-allowUntrusted 生成

"C:\プログラムファイル\ IIS \マイクロソフトWeb配置の\ msdeploy.exe" -source:パッケージ= 'C:\ハドソン\ジョブが\テスト\ワークスペースを\ app \ Test.Web \ obj \ Release \ Package \ Test.Web.zip '-dest:auto、computerName =' http:// [サーバー名]/MSDEPLO 「YAGENTSERVICE」、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

-1

これはうまくいきましたが、ターゲットファイルに気を散らしていましたが、接続文字列にエラーがありました。 http。

からMSBuild.exe Web.csproj/P:設定=デバッグ/ P:DeployOnBuild =真/ P:DeployTarget = MSDeployPublish/P:MsDeployServiceUrl =のhttp:// [サーバー名]/MsDeployAgentService/P:DeployIisAppPath = DeploymentTestProject/P :MSDeployPublishMethod = RemoteAgent/p:CreatePackageOnPublish = True/p:username =

関連する問題