9

当我传入用户凭据时,我的 MSDeploy 部署与 TeamCity 完美配合。命令行参数(对某些值使用环境变量)是:

MSBuild.exe Web.csproj
/P:Configuration=%env.Configuration%
/P:DeployOnBuild=True
/P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl= https://%env.TargetServer%/MsDeploy.axd
/P:AllowUntrustedCertificate =True
/P:MSDeployPublishMethod=WMsvc
/P:CreatePackageOnPublish=True
/P:UserName=%env.AdminUser%
/P:Password=%env.AdminPassword%

工作得很好。但现在我想使用集成身份验证。我尝试按照 Troy 的建议从Can MSBuild deploy using integration authentication or only basic? 但它并没有起到作用。我尝试了传入空白用户名并指定的各种组合

/p:AuthType=NTLM

我得到的最接近的是通过指定 /p:AuthType=NTLM 并传入一个空白用户名。但这仍然会导致此错误:

使用 Web 管理服务连接到目标计算机(“[我的目标服务器名称]”),但无法授权。确保您使用正确的用户名和密码,您要连接的站点存在,并且凭据代表有权访问该站点的用户。远程服务器返回错误:(401) Unauthorized

我在本地和远程服务器上都运行了 Web 管理服务。我将两个实例都更改为以我知道对站点具有适当访问权限的用户身份运行 - 如果我手动传递凭据,则该用户可以工作。

我还尝试在目标站点上手动授予该用户 IIS 管理器权限(尽管不确定为什么需要这样做,因为用户可以在手动传递其凭据时发布到该站点)。

我注意到的一件事是,在 WMsvc 日志中,它没有为使用 NTLM 身份验证所做的尝试记录任何用户名。

知道这里发生了什么。我真的不想在我的 TeamCity 配置中存储用户凭据。

谢谢。

4

3 回答 3

12

我知道我提交和回答这个问题有点晚了,但是为了其他任何人都在努力解决这类问题,我刚刚设法让这个工作正常进行。

与 OP 类似,我试图让 Windows Server 2008R2 上的 TeamCity 使用 WMsvc 在远程 IIS 7.5 服务器上发布网站。

在完成所有这些步骤之前,我一直在努力解决 401 错误:

  • 确保 AuthType=NTLM 参数集。

  • 确保提供了用户名参数,但设置为空值。

  • 确保在远程 Web 服务器上启用 NTLM 身份验证,这涉及添加注册表项:

    HKLM\Software\Microsoft\WebManagement\Server
    DWORD WindowsAuthenticationEnabled = 1
    
  • 确保构建代理在构建服务器上运行的用户上下文可以成功地与 WMsvc 建立 Windows 集成身份验证连接。我实际上必须以该用户身份登录到构建服务器,然后打开 IE,并将目标网站添加到本地 Intranet 区域。基本上,我一直在点击这个 URL 并更改 IE 中的设置,直到我可以直接访问它而没有身份验证提示或 401 错误:

    https://[the server]:8172/MsDeploy.axd?site=[the site]
    

顺便说一句,当我让身份验证工作时,远程 WMSvc 开始在browser 中给我 404 错误,结果证明这是一个好兆头。在此过程中,我还在构建服务器信任的远程 WMsvc 上设置了 SSL 证书 - 可能不是必需品,但它有助于我的测试。

完成上述操作后,TeamCity 部署开始报告此错误:

An error occurred when the request was processed on the remote computer.
The server experienced an issue processing the request. Contact the server administrator for more information.

我在事件日志中找不到任何有用的东西,但这里的修复只是为了确保经过身份验证的用户对目标文件夹具有必要的文件系统权限。您可能想要更有选择性,但我只是让他们完全控制 Inetpub。

于 2013-02-25T03:46:34.397 回答
1

构建代理服务是否在您要使用的帐户下运行?您提到了 Web 管理服务,但请记住,实际上是构建代理在做这项工作并需要权限。

于 2011-11-09T02:59:20.230 回答
0

我假设部署是使用 TeamCity-Agent 的帐户执行的。这可以解释你的错误。确保此帐户具有适当的部署权限。

于 2011-11-08T18:29:57.667 回答