msdeploy 通过 jenkins 和服务帐户:已连接但“无法授权”?

Sea*_*een 5 iis msdeploy jenkins windows-server-2012-r2

背景/目标

运动部件:

  • 我有一个服务帐户,我们称之为MyDomain\svcMyService
  • 我有一个远程服务器,我们称之为MyDomain\MyServer
  • 我有一个 Jenkins 服务器,我们称之为MyDomain\MyJenkins.

在詹金斯,我有一个部署任务。它抓取一些工件,然后调用msdeploy将它们推送到 MyServer。

此部署步骤失败,我想弄清楚原因。

我正在使用的 MSDeploy 命令

该命令由 Jenkins 自动生成,最终如下(敏感数据省略):

 "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:iisApp="E:\Jenkins\jobs\NotARealJobName\workspace" -dest:iisApp="MyWebSite/MyWebApp",ComputerName="https://MyServer:8172/MsDeploy.axd",UserName=MyDomain\svcMyService,Password="NotARealPassword" -allowUntrusted 
Run Code Online (Sandbox Code Playgroud)

错误

我从 msdeploy 输出中看到的错误消息是:

错误代码:ERROR_USER_UNAUTHORIZED 更多信息:使用 Web 管理服务连接到远程计算机(“MyServer”),但无法授权。确保您使用正确的用户名和密码,您要连接的站点存在,并且凭据代表有权访问该站点的用户。了解更多信息:http : //go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED

错误:远程服务器返回错误:(401) 未经授权。

我对我必须做的事情的理解

这可能是一个不完整或不正确的列表。请告诉我这是否是问题所在。

我想我必须:

  • 在 IIS 上安装 WebDeploy(在这种情况下是最新的 3.6)。
  • 在 IIS 中启用管理服务。
  • 创建一个作为MyDomain\svcMyService.
  • 是的,部署的用户名也在运行它。不是最好的,我知道。此刻脱离了我的手。
  • 为我的 IIS Web 应用程序创建目录。
  • 授予对此目录的权限。
    • 完全权限 svcMyService
    • 完全权限 WDeployAdmin
    • 完全权限NetworkService(因为这是 WMSvc 运行的方式)
  • 使用适当的端口创建网站
    • 该网站应在服务帐户的应用程序池下运行
    • 该网站应使用该svcMyService帐户连接到该文件夹。
  • 在网站下创建一个 Web 应用程序。
    • 该网站应使用该svcMyService帐户连接到该文件夹。
    • 添加svcMyService帐户作为站点和应用程序级别的部署管理器。
  • 确保本地WDeployConfigWriterWDeployAdmin帐户未过期,并且无法更改其密码。
  • 确保IIS管理委托使用WDeployConfigWriterWDeployAdmin账户,如果你对那些本地帐户更改了密码更新这些凭据每个代表团。

到目前为止的故障排除

我会在尝试排除故障时更新此列表。

检查 WMSvc IIS 日志——看起来我的用户无权发布

  • 日志样本如下:

#Fields: 日期时间 s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status 时间-taken 2015-09-14 17:10:06 [服务器 IP] HEAD /MsDeploy.axd - 8172 - [Jenkins IP] - - 401 2 5 15

我看到所有状态都是 401.2,win32 代码为 5。

根据此故障排除链接,“如果用户已通过身份验证,但没有发布所需的权限,则日志条目将如下所示”( 401 2 5)。

参考文章

Sea*_*een 5

在 2011年的这篇旧论坛帖子上找到了答案——它看起来真的很晦涩。

在该论坛帖子上找到的解决方案是:

  • 打开注册
  • 打开路径 HKEY_LOCAL_MACHINE\Software\Microsoft\WebManagement\Server
  • 添加一个名为 DWORDWindowsAuthenticationEnabled的值为1
  • 重启 WMsvc 和 IIS

执行这些步骤后,它似乎第一次对我有用。