12

MsBuild パッケージ + デプロイ コマンドを 2 つの個別のコマンドに分割する際に、いくつかの問題が発生しています。(追加のパラメーターを MsDeploy に渡すには、これを行う必要があります)。

正常に動作するコマンドは次のようになります。

msbuild "src\Solution.sln" 
  /P:Configuration=Deploy-Staging 
  /P:DeployOnBuild=True
  /P:DeployTarget=MSDeployPublish
  /P:MsDeployServiceUrl=https://192.168.0.1:8172/MsDeploy.axd
  /P:DeployIISAppPath=staging.website.com 
  /P:AllowUntrustedCertificate=True 
  /P:MSDeployPublishMethod=WmSvc 
  /P:CreatePackageOnPublish=True 
  /P:UserName=staging-deploy 
  /P:Password=xyz

分離パッケージ コマンドは次のようになります。

msbuild "src\Solution.sln" 
  /P:Configuration=Deploy-Staging 
  /P:DeployOnBuild=True
  /P:DeployTarget=Package 
  /P:_PackageTempDir=C:\temp\web

これは正常に動作します。しかし、MsDeploy 部分:

msdeploy 
 -verb:sync 
 -allowUntrusted 
 -usechecksum
 -source:manifest=
  'src\WebProject\obj\Deploy-Staging\Package\WebProject.SourceManifest.xml'  
 -dest:auto,ComputerName=
  'https://192.168.0.1:8172/MsDeploy.axd?site=staging.website.com',
   username='staging-deploy',password='xyz',authType='basic',includeAcls='false'
 -enableRule:DoNotDeleteRule

失敗し、WmSvc.log に次のエラーが記録される

wmsvc.exe Error: 0 : Attempted to perform an unauthorized operation.
setAcl/C:\temp\web (Read)
ProcessId=15784
ThreadId=31
DateTime=2011-03-30T14:57:02.4867689Z
Timestamp=3802908721815
wmsvc.exe Error: 0 : Not authorized.
Details: No rule was found that could authorize user 'staging-deploy', 
         provider 'setAcl', operation 'Read', path 'C:\temp\web'.

(およびさらにいくつかの読み取り/書き込み操作)

アクセスしようとしているパスに明らかに問題があります (他の方法では問題なく動作するため) - iisApp ターゲティングを正しく使用しようとしているのかどうかもわかりません。 .config も展開されます。

4

3 に答える 3

15

これを修正しました-自動生成された.cmdファイルが使用していたコマンドとは別のコマンドが必要でしたが、2つを比較すると修正できました(@Vishal R. Joshiに感謝)

私が必要とした違いは次のとおりです。

  • 基本認証
  • 信頼できない証明書を許可する
  • 元のコマンドと同様に、MsBuild.axd パスの末尾に ?site=staging.webserver
  • params ファイルに設定されている IIS Web アプリ名をオーバーライドします。
  • 削除しないルールを有効にする

勝利のコマンドは次のとおりです。

msdeploy 
 -verb:sync 
 -allowUntrusted 
 -source:package='src\WebProject\obj\Deploy-Staging\Package\WebProject.zip'  
 -dest:auto,ComputerName=
  'https://192.168.0.1:8172/MsDeploy.axd?site=staging.website.com',
  username='staging-deploy',password='xyz',authType='basic',includeAcls='false'
  setParamFile:
    "src\WebProject\obj\Deploy-Staging\Package\WebProject.SetParameters.xml"
 -setParam:name='IIS Web Application Name',value='staging.website.com'
 -enableRule:DoNotDeleteRule
 -disableLink:AppPoolExtension -disableLink:ContentExtension 
 -disableLink:CertificateExtension

これが誰かを助けることを願っています!

于 2011-03-31T08:49:57.163 に答える
1

staging-deploy が set-Acl 操作を実行できるように、inetmgr を使用してサーバーに委任ルールを追加します。Inetmgr -> サーバー ノードをクリック -> Management Service Delegation (管理内) -> 右側の [ルールの追加] をクリック -> 「アプリケーションのアクセス許可の設定」というラベルの付いたテンプレートを選択 -> デフォルトを受け入れ、[OK] をクリックします。

これにより、デプロイするユーザーがデプロイ先のサイトへのアクセス許可を持っている限り、setAcl を使用して任意のパッケージまたはマニフェストをデプロイできます。

于 2011-03-30T21:06:47.333 に答える
0

Web プロジェクトからパッケージを生成するときに作成される MyProject.deploy.cmd ファイルを呼び出すときに、 -setParam:name='',value=''フラグを指定できます。cmd は msdeploy.exe の親しみやすいラッパーであるため、残りの既定値をすべて指定する必要はありません。

詳細は次のとおりです。 http://evolutionarydeveloper.blogspot.co.uk/2013/05/specifying-environment-variables-at.html

于 2013-05-22T23:18:58.237 に答える