我遇到一些问题,将MsBuild package + deploy命令分成两个单独的命令。 (我需要这样做才能将其他参数传递给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。
答案 0 :(得分:15)
我现在已经解决了这个问题 - 我需要一个与自动生成的.cmd文件正在使用的命令不同的命令,但比较这两个命令允许我修复它(感谢@Vishal R. Joshi)
我需要的差异是:
获胜命令如下:
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 :(得分:1)
使用inetmgr在服务器上添加委派规则,以允许staging-deploy执行set-Acl操作。 Inetmgr - >单击服务器节点 - >管理服务代表团(在管理中) - >点击右侧的添加规则 - >选择标记为“设置应用程序权限”的模板 - >接受默认值并单击“确定”。
这使您可以使用setAcl部署任何软件包或清单,只要您要部署的用户具有您要部署到的网站的权限。
答案 2 :(得分:0)
在调用从Web项目生成包时创建的MyProject.deploy.cmd文件时,可以指定 -setParam:name ='',value =''标志。 cmd是msdeploy.exe的友好包装器,因此您无需指定所有其余的默认值。
以下是详细信息:http://evolutionarydeveloper.blogspot.co.uk/2013/05/specifying-environment-variables-at.html