2011-03-30 81 views
12

我有幾個問題將一個MsBuild包+部署命令分解爲兩個單獨的命令。 (我需要這樣做來將其他參數傳遞給MsDeploy)。打破MsBuild包和部署到單獨的MsBuild和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定位,而此刻我不認爲正確的web.config會被部署。

回答

15

我有現在這個固定的 - 我需要一個不同的命令,自動生成的.cmd文件用的是一個,但兩相比較讓我來修復它(感謝@Vishal R.喬希)

我需要的差異是:?

  • 基本身份驗證
  • 允許不受信任的證書
  • 網站= staging.webserver在MsBuild.axd路徑的終點,因爲我原來的命令
  • 重寫在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 

希望這可以幫助別人!

+1

James,這是由myproj.deploy.cmd生成的這個msdeploy命令文件還是手工製作? 謝謝 Vishal R. Joshi | http://vishalrjoshi.com | http://twitter.com/vishalrjoshi – 2011-03-31 07:19:20

+1

嗨維薩爾,不完全 - 與deploy.cmd命令的問題是:我需要設置基本的身份驗證,我必須添加?site = staging.webserver作爲參數上的目標計算機名稱,因爲用戶沒有權限訪問所有的IIS這就是說,我已經設法讓這個工作現在 - 事實證明我應該一直在使用source:package而不是source:manifest(我認爲它正在嘗試使用目標服務器上的清單定義而不是本地創建一個包 - 我自己對它將如何工作的誤解)。 – 2011-03-31 08:57:17

1

使用inetmgr在服務器上添加委派規則以允許分段部署執行set-Acl操作。 Inetmgr - >單擊服務器節點 - >管理服務委派(在管理中) - >單擊右側添加規則 - >選擇標記爲「設置應用程序權限」的模板 - >接受默認值並單擊確定。

只要您正在部署的用戶具有對要部署到的站點的權限,就應該允許您使用setAcl部署任何軟件包或清單。

+1

感謝Owais,但它已經擁有該用戶的權限SETACL(帶的contentPath,createApp和iisApp一起)。此外,當然直接調用msdeploy(如果我正確地做的話)將需要與msbuild路由相同的服務器端權限 - 並且工作完全正常... – 2011-03-30 21:14:58