使用MsDeploy通过preSync命令部署Windows服务

10

有人成功地使用MsDeploy来使用preSync runCommand部署Windows服务吗?我已经使用管理员帐户使其工作,但是我无论如何都无法让它在标准用户帐户上运行。不幸的是,我无法使用集成身份验证(我们正在部署到外部框),而且我们的管理员密码明文存储在构建服务器的日志中的想法并不让我感到舒服。就此而言,任何用户凭据也是如此,但我看不到任何解决方法。

我正在使用以下命令:

"tools/deploy/msdeploy.exe" -verb:sync 
-preSync:runCommand="tools\Deploy\PreSyncCommand.cmd",waitInterval=30000 
-source:dirPath="C:\BuiltSourcePath" 
-dest:computerName=https://server:8172/msdeploy.axd?site=dummysitename,userName=service-deploy,password=service-deploy-pass,authType=basic,dirPath="C:\DeployPath\"
-allowUntrusted

在IIS中设置规则,允许虚拟站点对service-deploy Windows账户进行身份验证,并赋予contentPath和runCommand权限(目前设置为C:\,因为还不清楚是否需要将其设置为MsDeploy流式传输到的临时路径或部署路径)。service-deploy账户还具有目标目录的完全控制权。我得到以下返回结果:

Performing '-preSync'...
Info: Using ID '7a7d34a1-b5d8-49f1-960a-31c9cf825868' for connections to the remote server.
Info: Using ID '4d0b910c-aca4-4640-84bd-3597d22d99d1' for connections to the remote server.
Info: Updating runCommand (C:\TeamCity\buildAgent\work\aec989676b349656\tools\De
ploy\PreSyncCommand.cmd).
Warning: Access is denied.
Warning: The process 'C:\Windows\system32\cmd.exe' (command line '/c "C:\Windows
\ServiceProfiles\LocalService\AppData\Local\Temp\giz2t0kb.0ay.cmd"') exited with
 code '0x1'.

即使PreSyncCommand.cmd的内容为空,这种情况仍会发生。如果我使用管理员凭据运行相同的命令,则可以正常运行该命令。我尝试使用ProcessMonitor检查是否拒绝了访问权限,但看不到任何东西 - 所以我猜测这仍然是MsDeploy认证规则的问题。在WmSvc.log中没有任何内容(启用了调试),事件日志中也没有。

有什么想法吗?谢谢!


2
我已经发布了一篇关于如何使用MSDeploy部署Windows服务的博客文章:http://www.jamescrowley.co.uk/2011/04/28/deploying-windows-services-using-msdeploy/ - James Crowley
2
James Crowley上面发布的博客文章已经移动了,现在在这里:http://www.jamescrowley.co.uk/2011/09/05/deploying-windows-services-using-msdeploy/。 - Jack Hughes
1个回答

14

由于您正在使用WmSvc通过Web Deploy,因此需要在目标服务器上设置适当的委派规则:

IIS Manager中打开“管理服务委派”功能。添加一个新规则,至少指定runCommand提供程序。在Run As部分中,选择Specific User并提供该计算机上的本地管理员帐户的凭据。这是您的runCommand脚本将被执行的身份。最后,需要将指定为目标dirPath提供程序的用户添加到委派规则中。

这样,您就可以使用非特权帐户调用部署,并在目标机器上以管理员凭据运行它。

有关IIS功能委派的更多信息:http://learn.iis.net/page.aspx/516/configure-the-web-deployment-handler/


谢谢!我缺少的是“以管理员身份运行”元素。现在它完美地工作了。 - James Crowley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接