背景/目标

背景/目标

背景/目标

运动部件:

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

在 Jenkins 中,我有一个部署任务。它抓取一些工件,然后调用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 

错误

我从 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 管理委派正在使用WDeployConfigWriter帐户,WDeployAdmin并且如果您更改了这些本地帐户的密码,请为每个委派更新这些凭据。

到目前为止的故障排除

当我尝试排除故障时,我会不断更新此列表。

检查 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 花费时间 2015-09-14 17:10:06 [服务器 IP] HEAD /MsDeploy.axd - 8172 - [Jenkins IP] - - 401 2 5 15

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

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

参考文章

答案1

我找到了答案在 2011 年的这个旧论坛帖子上——这看起来确实很模糊。

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

  • 打开 Regedit
  • 打开路径HKEY_LOCAL_MACHINE\Software\Microsoft\WebManagement\Server
  • 添加一个名为的 DWORD WindowsAuthenticationEnabled,其值为1
  • 重新启动 WMsvc 和 IIS

执行这些步骤后,它似乎第一次就对我起作用了。

相关内容