如何使用集成Windows身份验证使用MSDeploy和TeamCity进行部署?

时间:2011-11-08 16:07:22

标签: msbuild teamcity msdeploy msdeployserviceagent

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

  

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

工作得很好。但现在我想使用集成的身份验证。我尝试从Can MSBuild deploy using integrated authentication or only basic?跟踪特洛伊的建议,但它没有做到这一点。我尝试了传递空白用户名并指定

的各种组合
  

/ P:=进行AuthType NTLM

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

  

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

我在本地和远程服务器上都运行Web管理服务。我将两个实例更改为以我认识的用户正确访问该站点的方式运行 - 如果我手动传入凭据,则该用户可以正常工作。

我还尝试在目标站点上手动为该用户提供IIS管理员权限(但不确定为什么这是必要的,因为用户可以在手动传递凭据时发布到站点)。

我注意到的一件事是,在WMsvc日志中,它没有记录使用NTLM auth进行的尝试的任何用户名。

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

感谢。

3 个答案:

答案 0 :(得分:12)

我知道我提交并回答这个问题的时间有点迟了,但是为了其他任何追逐此类问题的人的利益,我只是设法让这个工作。

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

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

  • 确保AuthType = NTLM参数设置。

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

  • 确保在远程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]
    

顺便说一下,当我使用auth工作时,远程WMSvc开始在Brownser中给我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的完全控制权。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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