2011-03-30 67 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