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

Jam*_*ley 9 windows-services web-deployment msdeploy

是否有人成功使用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
Run Code Online (Sandbox Code Playgroud)

在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'.
Run Code Online (Sandbox Code Playgroud)

即使PreSyncCommand.cmd的内容为空,也会发生这种情况.如果我传入管理员凭据,则相同的命令运行正常.我已经尝试使用ProcessMonitor来检查是否有任何被拒绝访问但看不到任何内容 - 所以我猜它仍然是一个MsDeploy身份验证规则.WmSvc.log中没有任何内容(启用了调试),也没有在事件日志中.

有任何想法吗?谢谢!

mth*_*rba 13

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

IIS管理器中,打开"管理服务委派"功能.添加一条至少指定runCommand提供者的新规则.在" 运行方式"部分中,选择Specific User并提供该计算机上本地管理员帐户的凭据.这是执行runCommand脚本的标识.最后,您要为目标dirPath提供程序指定的用户需要添加到委派规则中.

这允许您使用非特权帐户调用部署,然后在管理凭据下在目标计算机上执行它.

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