msbuild - 如何使用带有集成 Windows 身份验证的 MSDeploy 和 TeamCity 进行部署?

标签 msbuild teamcity msdeploy msdeployserviceagent

当我传入用户凭据时,我的 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%

效果很好。但现在我想使用集成身份验证。我尝试遵循特洛伊的建议 Can MSBuild deploy using integrated authentication or only basic?但这并没有达到目的。我尝试了传入空白用户名并指定

的各种组合

/p:AuthType=NTLM

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

Connected to the destination computer ("[my destination server name]") using the Web Management Service, but could not authorize. Make sure that you are using the correct user name and password, that the site you are connecting to exists, and that the credentials represent a user who has permissions to access the site. The remote server returned an error: (401) Unauthorized

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

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

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

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

谢谢。

最佳答案

我知道我提交和回答这个问题有点晚了,但为了其他人追寻此类问题的利益,我刚刚设法让这个工作正常进行。

与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 开始在 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 的完全控制权。

关于msbuild - 如何使用带有集成 Windows 身份验证的 MSDeploy 和 TeamCity 进行部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053441/

相关文章:

java - 如何在构建步骤中配置自动提交

c++ - 如何将自定义 Artifactory 从 TeamCity 发布到 Artifactory?

asp.net - 通过 MSdeploy.exe 部署时发生错误 550

iis - 使用 MSDeploy 和 TFS 2010 设置应用程序池

iis - Web部署3(IIS)的自动备份-在备份中排除文件夹

msbuild - 使用 VS Code 发布 Web 部署

versioning - Moq 文件版本和程序集版本不匹配,导致 TeamCity 出现问题?

msbuild - 如何在 MSBuild 中编译 TypeLite T4 模板

tfs - 通过 MSBuild 的 MSDeploy 的有效参数

visual-studio - 在 .csproj 中使用条件符号