12

我在将 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 定位,目前我不认为正确的网络.config 也将被部署。

4

3 回答 3

15

我现在已经解决了这个问题 - 我需要一个与自动生成的 .cmd 文件正在使用的命令不同的命令,但是比较这两个命令可以让我修复它(感谢@Vishal R. Joshi)

我需要的差异是:

  • 基本认证
  • 允许不受信任的证书
  • ?site=staging.webserver 在 MsBuild.axd 路径的末尾,与我的原始命令一样
  • 覆盖在 params 文件中设置的 IIS Web App 名称
  • 启用不删除规则

中奖命令如下:

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

使用 inetmgr 在服务器上添加委托规则以允许 staging-deploy 执行 set-Acl 操作。Inetmgr -> 单击服务器节点 -> 管理服务委派(在管理中) -> 单击右侧的添加规则 -> 选择标记为“设置应用程序权限”的模板 -> 接受默认值,然后单击确定。

这应该允许您使用 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 回答