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

Msbuild 如何使用MSDeploy和TeamCity部署集成Windows身份验证?,msbuild,teamcity,msdeploy,msdeployserviceagent,Msbuild,Teamcity,Msdeploy,Msdeployserviceagent,当我传递用户凭据时,我的MSDeploy部署与TeamCity配合得很好。命令行参数(对某些值使用环境变量)为: MSBuild.exe Web.csproj /P:配置=%env.Configuration% /P:DeployOnBuild=True /P:DeployTarget=MSDeployPublish /P:MsDeployServiceUrl=/P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMsvc /P:

当我传递用户凭据时,我的MSDeploy部署与TeamCity配合得很好。命令行参数(对某些值使用环境变量)为:

MSBuild.exe Web.csproj
/P:配置=%env.Configuration%
/P:DeployOnBuild=True
/P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl=
/P:AllowUntrustedCertificate=True
/P:MSDeployPublishMethod=WMsvc
/P:CreatePackageOnPublish=True
/P:UserName=%env.AdminUser%
/P:密码=%env.AdminPassword%

工作得很好。但现在我想使用集成身份验证。我试着按照特洛伊的建议去做,但是没有用。我尝试了各种组合,包括传入空白用户名和指定

/p:AuthType=NTLM

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

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

我在本地和远程服务器上都运行Web管理服务。我将这两个实例都更改为以一个我知道可以正确访问站点的用户的身份运行—如果我手动传递凭据,则该用户也可以运行

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

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

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


谢谢。

我假设部署是使用TeamCity代理的帐户执行的。这可以解释你的错误。确保此帐户具有相应的部署权限

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

我知道我提交和回答这一问题有点晚,但为了其他任何人解决这类问题的利益,我刚刚设法使它工作起来

与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]
    
顺便说一句,当我让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。

很抱歉,我应该指出这一点。是的,TeamCity Build Agent服务也在具有适当权限的帐户下运行。一直都是这样,我刚刚更新了Web管理服务,因为错误指示“使用Web管理服务”。@Troy您使用NTLM成功连接到WMSvc了吗?像
msdeploy.exe-verb:dump-source:apphostconfig,wmsvc=SERVER123,username=,authType=ntlm-allowUntrusted这样的简单测试(我是SERVER123上的管理员)会产生401个错误。请参阅上面的注释。简短的回答,它有。只是给手动添加注册表项WindowsAuthenticationEnabled的人一个提示-从我刚刚浪费的3个小时对部署进行故障排除中学习,并确保不会意外地将尾随空格粘贴到注册表项名称中!Gah.+1用于指出本地Intranet区域问题。当我尝试使用computerName=''而不是主机名时,它工作正常。然而,指定一个空白用户名似乎对它的工作毫无用处。