Deployment 破坏MsBuild包&;部署到单独的MsBuild和MsDeploy命令中
我在将MsBuild package+deploy命令拆分为两个单独的命令时遇到了一些问题。(我需要这样做才能将其他参数传递给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 "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定义创建一个包——我自己对它的工作原理有误解)。