如何在使用WMSVC服务和NTLM身份验证的Team Build 2010中使用MSDeploy进行部署?

30

我正在尝试使用Team Build 2010将应用程序部署到Windows Server 2008 R2 Web服务器。我的构建服务器代理已设置为在Windows域帐户下运行。我已经成功地为此域帐户使用IIS Manager权限在我的Web服务器上授予权限以进行部署。该帐户在Web服务器上不是管理员。我可以使用以下参数成功地进行构建部署:

/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:CreatePackageOnPublish=False 
/p:MSDeployPublishMethod=WMSVC 
/p:AllowUntrustedCertificate=True 
/p:MSDeployServiceUrl=webservername
/p:DeployIisAppPath="Web Site Name"
/p:UserName=DOMAIN\BUILDID
/p:Password=buildidpassword

由于其他开发人员将设置其构建流程,我不想公开域帐户的密码,因此需要使用NTLM身份验证来进行部署。我希望继续使用Web管理服务方法(WMSVC)进行部署,以便BUILDID不必成为管理员。

我深入研究了“Microsoft.Web.Publishing.targets”并发现应该能够通过传递AuthType参数来控制授权类型,但它似乎没有任何效果。我已尝试过:

/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:CreatePackageOnPublish=False 
/p:MSDeployPublishMethod=WMSVC 
/p:AllowUntrustedCertificate=True 
/p:MSDeployServiceUrl=webservername
/p:DeployIisAppPath="Web Site Name"
/p:AuthType=NTLM

我还尝试了在StackOverflow上看到的将用户名留空的方法,但没有用。我仍然得到以下错误:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5): error : Web deployment task failed.(使用 Web 管理服务连接到目标计算机 ("webservername") 成功,但未能授权。请确保您正在使用正确的用户名和密码,要连接的站点存在,并且凭据表示具有权限访问站点的用户。)

我还尝试了在之前提到的链接中提到的 UseMsdeployexe 参数,但我随后遇到与 web.config 转换相关的其他错误。根据 Microsoft Connect 上已经存在的问题 ,该问题已在下一版本中得到修复。


嘿 @Michael McGuire - 你解决了这个问题吗?我现在和你一样陷入同样的困境! :-( 尝试使用Atlassian Bamboo使用msdeploy发布到Windows Server 2008 R2上的IIS 7,似乎无法使用NTLM使其工作。两台机器都在域上。 - Pandincus
1
我会查看目标计算机上的事件日志,特别是安全日志。我还会尝试从命令行使用MSDEPLOY命令,首先在自己的工作站上,然后如果可能的话,在构建机器上执行。 - John Saunders
抱歉,我还没有让这个工作起来。目前,我在我的构建中有我们的构建ID密码。 - Michael McGuire
似乎没有人愿意解决这个问题...这真是令人失望。即使有一份适度的赏金,它也收到了6个新的Upvote,但没有答案。 - one.beat.consumer
你可以使用像Wireshark或Fiddler这样的工具来验证你的请求是否正常吗?我们不使用Team Build,但在我们的构建服务器上,它确实使用MSDeploy(通过我们自己的.NET定制代码)来部署到我们的Web服务器。 - kamranicus
2个回答

10

还有一个额外的步骤,我之前没有注意到:

来源

您可以选择启用用户使用NTLM进行Web管理服务的身份验证。要执行此操作,请在服务器上更新注册表,在HKEY_LOCAL_MACHINE\Software\Microsoft\WebManagement\Server下添加名为“WindowsAuthenticationEnabled”的DWORD键,并将其设置为1。如果Web Management Service已经启动,则设置将在服务重新启动后生效。


在我的 .pubxml 文件和 msbuild 参数中不断地尝试各种设置,但添加了这个注册表键之后问题立刻得到解决。(TFS2012 通过 WMSVC 发布到 Win2008R2,无需管理员账户) - Stuntbeaver

5
如果使用NTLM失败,则需要向团队构建服务代理授权以允许非管理员连接到站点或应用程序部署服务器访问。您可以在管理服务下配置此设置。
您可能还希望查看配置Web部署提供程序设置的方法,Web Deploy Provider Settings
如果指定了wmsvc提供程序设置,则默认身份验证类型为基本身份验证;否则,默认身份验证类型为NTLM。
如果您想使用基本身份验证类型,则可以使用encryptPassword参数加密密码并在托管服务器上配置设置。
希望这有所帮助。
该错误代码可能出现的原因有很多种。它通常表示认证或授权问题,并且可能由以下任何原因之一引起:
如果使用Web管理服务进行连接:
- 验证用户名和密码是否正确 - 验证站点是否存在 - 验证用户是否具有对站点范围的IIS管理器权限
如果使用远程代理服务进行连接:
- 验证用户名和密码是否正确 - 验证您指定的用户帐户是否是远程计算机上管理员组的成员。注意:由于Web Deploy 2.0中的一个错误,用户必须是内置管理员或域管理员安全组的成员。尝试使用任何其他用户帐户进行同步,即使它是管理员,也会看到此错误代码。 - 验证站点是否存在

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接