Deployment 破坏MsBuild包&;部署到单独的MsBuild和MsDeploy命令中

Deployment 破坏MsBuild包&;部署到单独的MsBuild和MsDeploy命令中,deployment,msbuild,teamcity,msdeploy,webdeploy,Deployment,Msbuild,Teamcity,Msdeploy,Webdeploy,我在将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

我在将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
分离的打包命令如下所示:

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。

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


这应该允许您使用setAcl部署任何软件包或清单,只要您部署的用户对您部署到的站点具有权限。

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

我需要的区别是:

  • 基本身份验证
  • 允许不受信任的证书
  • ?site=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

希望这对别人有帮助

调用从web项目生成包时创建的MyProject.deploy.cmd文件时,可以指定-setParam:name='',value=''标志。cmd是msdeploy.exe的友好包装器,因此无需指定所有其他默认值


以下是详细信息:

谢谢Owais,但它已经拥有该用户的setAcl权限(以及contentPath、createApp和iisApp)。另外,直接调用msdeploy(如果我没有弄错的话!)肯定需要与msbuild路由相同的服务器端权限——这完全可以……James,这个msdeploy命令是由myproj.deploy.cmd文件生成的还是手工制作的?谢谢Vishal R.Joshi | | |嘿,Vishal,不太好-deploy.cmd命令的问题是:我需要设置基本身份验证,并且我必须在目标计算机名上添加?site=staging.webserver作为参数,因为用户没有访问所有IIS的权限,我现在已经设法让它工作了——结果我本应该使用source:package而不是source:manifest(我认为它是试图在目标服务器上而不是在本地使用manifest定义创建一个包——我自己对它的工作原理有误解)。