78

Vishal Joshi在此处提供了一个出色的 PDC 演讲,其中描述了 Visual Studio 2010 中的新 MSDEPLOY 功能 - 以及如何在 TFS 中部署应用程序。(还有来自Scott Hanselman 的精彩演讲,但他没有进入 TFS)。

您可以在 TFS2010 中使用 MSBUILD 调用 MSDEPLOY 以将您的包部署到 IIS。这是通过 MSBUILD 的参数来完成的。

该演讲解释了一些命令行参数,例如:

/p:DeployOnBuild
/p:DeployTarget=MsDeployPublish
/p:CreatePackageOnPublish=True
/p:MSDeployPublishMethod=InProc
/p:MSDeployServiceURL=localhost
/p:DeployIISAppPath="Default Web Site"

但是这方面的文档在哪里 - 我找不到任何文件?

我一整天都在试图让它工作,但不能完全正确并不断出现各种错误。如果我运行包的cmd文件,它会完美部署。如果我通过 Visual Studio 运行 WebDeploy,它也可以完美运行。

但我想通过msbuild使用这些参数来运行整个部署,而不是单独调用msdeploy或运行包.cmd文件。我怎样才能做到这一点?

PS。是的,我确实有Web Deployment Agent Service跑步。我还有在 IIS 下运行的管理服务。我试过两者都用。


我正在使用的参数:

/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:Configuration=Release 
/p:CreatePackageOnPublish=True  
/p:DeployIisAppPath=staging.example.com   
/p:MsDeployServiceUrl=https://staging.example.com:8172/msdeploy.axd 
/p:AllowUntrustedCertificate=True

给我 :

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (2660):VsMsdeploy 失败。(远程代理(URL https://staging.example.com: 8172/msdeploy.axd?site=staging.example.com)无法联系。确保远程代理服务已安装并在目标计算机上启动。)错误详细信息:远程代理(URL https://staging.example。 com:8172/msdeploy.axd?site=staging.example.com)无法联系。确保在目标计算机上安装并启动了远程代理服务。收到了不受支持的响应。响应标头“MSDeploy.Response”为“”,但应为“v1”。远程服务器返回错误:(401) Unauthorized。

4

8 回答 8

48

IIS7 + 相关答案....

好的-这就是我最终要做的。或多或少,在此线程/问题中遵循Simon Weaver的帖子。

但是当涉及到 MSBuild 设置时.. 这里的大多数人都在使用以下设置:/p:MSDeployPublishMethod=RemoteAgent这对于 IIS7是不正确的。使用此设置意味着 TFS 会尝试连接到 url:https://your-server-name/MSDEPLOYAGENTSERVICE 但是要访问该 url,进行身份验证的用户需要是管理员。这是 fraked。(并且您需要勾选 Admin-override 规则)。我认为这个网址适用于 IIS6。

这是您尝试使用 RemoteAgent 连接时的标准错误消息:-

标准 401 Frak Off uuck RemoteAgent,错误

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (3588):Web 部署任务失败。(远程代理(URL http://your-web- server/MSDEPLOYAGENTSERVICE ) 无法联系。请确保在目标计算机上安装并启动了远程代理服务。) 确保站点名称、用户名和密码正确。如果问题仍未解决,请联系您的本地或服务器管理员。错误详细信息:远程代理(URL http://your-web-server/MSDEPLOYAGENTSERVICE) 无法联系。确保在目标计算机上安装并启动了远程代理服务。收到了不受支持的响应。响应标头“MSDeploy.Response”为“V1”,但应为“v1”。远程服务器返回错误:(401) Unauthorized。

所以..你需要改变你MSDeployPublishMethod的:

/p:MSDeployPublishMethod=WMSVC

WMSVC代表 Windows 管理器服务。它基本上是远程代理的更新包装,但现在允许我们更正提供用户名和密码.. 用户不必是管理员!(快乐!)所以现在您可以更正设置您希望访问的用户 .. per WebSite ..

在此处输入图像描述

它现在还尝试点击 url: https://your-web-server:8172/MsDeploy.axd<-- 这正是 Visual Studio 2010Publish窗口所做的!(天哪 -> 便士掉落!!轰!)

在此处输入图像描述

这是我最终的 MSBuild 设置:

/p:DeployOnBuild=True
/p:DeployTarget=MSDeployPublish 
/p:MSDeployPublishMethod=WMSVC
/p:MsDeployServiceUrl=your-server-name
/p:DeployIISAppPath=name-of-the-website-in-iis7    
/p:username=AppianMedia\some-domain-user 
/p:password=JonSkeet<3<3<3
/p:AllowUntrustedCertificate=True

注意用户名中有域名吗?你需要那个,那里。此外,在我的照片中,我已允许我们的域用户访问该网站进行管理。因此,我添加的新用户帐户(TFSBuildService)具有该Domain Users组的成员资格......这就是它的工作原理。

现在 - 如果你已经阅读了所有这些,请拥有一只笑笑猫(因为它们是 SOOOOOOOO 2007)....

在此处输入图像描述

于 2011-05-03T09:56:02.627 回答
19

这是最终对我有用的步骤。我想与 RemoteAgent 一起工作,但无论我尝试什么都无法正常工作。

您不必完全这样做,但这就是我的工作方式

  • 配置 WMSVC
  • 确保服务已启动
  • 配置 IIS 用户(单击 IIS 中的 TOP MOST SERVERNAME)并转到“IIS 管理器用户”。我建议使它与您的 Windows 名称不同。
  • 确保 WMSVC(对我来说是本地服务)的用户帐户对您正在使用的 IIS 目录具有写入权限
  • 在我的情况下,我使用的是 SSL 证书(即使它正在访问 localhost)。

请记住,这些都是在 TFS 构建定义中添加的 MSBUILD 的所有参数

/p:DeployOnBuild=True 
/p:DeployTarget=MSDeployPublish 
/p:MSDeployPublishMethod=WMSVC 
/p:MsDeployServiceUrl=https://staging.example.com:8172/msdeploy.axd 
/p:username=sweaveriis 
/p:password=abcd1234 
/p:DeployIisAppPath=staging.example.com/virtual_directory_name
/p:AllowUntrustedCertificate=True

注意:staging.example.com 实际上是本地框,其hosts 文件条目指向 127.0.0.1。本地主机也可能在这里工作。

有用的文章:

对 MSDeploy 问题进行故障排除

更多疑难解答

于 2010-04-17T00:17:15.323 回答
16

不幸的是,目前没有太多关于这方面的信息。不过,我会在此消息的末尾给您一些提示。


关于您的问题,我之前在尝试使用 MSDeploy 进行部署时已经看到了这一点,而我正在运行的帐户没有在目标计算机上执行部署的权限。因此,您需要查看运行构建的帐户,并查看该帐户是否有权部署到目标计算机。如果没有,那么您有几个选择;授予构建用户权限,或传入用户名/密码。

如果要传入值,则必须定义一个名为的项目MsDeployDestinationProviderSetting,其元数据必须包含必要的值。

因此,在您的项目文件(或通过传入的属性)中定义如下内容。

<PropertyGroup>
    <UserName>USERNAME-HERE</UserName>
    <Password>PASSWORD-HERE
</PropertyGroup>

关于在哪里可以找到文档,就像我之前说的那样,那里还没有多少。但是由于整个 Web 发布管道都包含在 MSBuild 目标和任务中,如果您熟悉 MSBuild,您可以自己学习很多东西。如果您查看使用 Visual Studio 2010 创建的 Web 项目的 .csproj(或 .vbproj)文件,您会注意到如下语句:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

这会导入位于 的文件 %ProgramFiles(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets,而该文件又会导入 %ProgramFiles(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets

因此,为了现在详细了解该主题,您必须检查这些文件并自己学习。


我将致力于详细介绍这些技术的内容,但它不会在很长一段时间内发布,而且我还有很多事情要弄清楚。

你能试试用户名/密码交易,让我知道它是否对你有用吗?

于 2010-04-15T02:55:20.857 回答
6

我有一个类似的问题,解决方案是具有以下参数:

/p:MSDeployPublishMethod=远程代理

这是我使用的所有参数。

/p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MSDeployPublishMethod= RemoteAgent /p:MsDeployServiceUrl= http://my-server-name /p:username=myusername /p:password=mypassword

注意:我没有使用 DeployIisAppPath,因为我正在构建一个解决方案并尝试一次构建三个 Web 应用程序。另外我认为您的 MsDeployServiceUrl 应该只是http://staging.example.com

似乎在为 MSDeployPublishMethod 使用 InProc(可能是默认值)时,MSBuild 会忽略 MsDeployServiceUrl 并始终尝试部署到本地服务器。我将其更改为 RemoteAgent,并且我的所有三个 Web 应用程序都已成功部署。我确实注意到包文件不再包含在 MyWebApplication_Package 文件夹中,但这对我来说没什么大不了的。

于 2010-04-16T15:42:14.917 回答
4

请注意,您还可以设置 DeployTarget=Package - 这将准备包但不会立即部署它。有关详细信息,请参阅此博客文章

于 2010-05-18T19:10:33.507 回答
3

对我来说,问题是Web Deployment Agent Service没有开始。

一个简单的net start msdepsvc固定它。您还可以在此服务上将启动模式设置为自动。

我使用的论点是:

/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:MSDeployPublishMethod=RemoteAgent 
/p:MSDeployServiceUrl=stagingserver 
/p:DeployIisAppPath=test.local 
/p:UserName=

您只需要指定服务器名称,而不是完整路径(不需要 http)。

请注意,将 UserName 留空以解决 NTLM 身份验证的错误(这样它使用 TFS 构建代理的凭据进行部署)。在此处查看接受的答案

于 2011-01-18T15:53:11.013 回答
3

这是我如何让它工作的。这是使用 Webdeploy 2.0。我正在从我们的构建机器到开发网络服务器机器 windows server 2008 r2 部署在同一个域上。我用来部署的帐户是域上的服务帐户,在两台机器上都具有管理员权限。我的解决方案包括几个单元测试项目、一个 mvc3 项目和解决方案下的几个库。如果您未在要部署的服务器上安装 MVC3,请查看http://www.iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc-3-visual-studio以获得指导。

/p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:DeployIisAppPath="Default Web Site/YourpplicationNameHere" /p:MsDeployServiceUrl=https://devserver02:8172/msdeploy.axd /p:AllowUntrustedCertificate=True /p:UserName =yourDomain\buildaccount /p:Password=password

  1. 我一开始遇到的问题是“默认网站/YourpplicationNameHere”周围的引号,这给出了部分错误:

    MSBUILD : 错误 MSB1008: 只能指定一个项目。

    当 Default Web Site/YourApplicationNameHere 周围没有引号时会发生这种情况

  2. 我得到的下一个错误是因为我的部署凭据中的用户名和密码错误。它给出了这个错误:

    C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (3588):Web 部署任务失败。(远程代理(URL https://devserver02:8172/ msdeploy.axd?site=Default Web Site) 无法联系。确保远程代理服务已在目标计算机上安装并启动。) 确保站点名称、用户名和密码正确。如果问题仍未解决,请联系您的本地或服务器管理员。错误详细信息:远程代理(URL https://devserver02:8172/msdeploy.axd?site=Default网站)无法联系。确保在目标计算机上安装并启动了远程代理服务。收到了不受支持的响应。响应标头“MSDeploy.Response”为“”,但应为“v1”。远程服务器返回错误:(401) Unauthorized。

    这是因为我在 /p:UserName=/p:Password= 中的用户名和密码不包括用户的域。即使构建在该用户下运行,它也不会部署。所以我在浏览器中直接点击 url https://devserver02:8172/msdeploy.axd以确保它正在运行并确保用户名和密码有效。这是我注意到我必须输入域/用户才能使其工作的地方。

我希望可以回复我认为其他一些可怜的灵魂找到了这些错误,这可能会有所帮助......

于 2011-05-02T15:45:33.507 回答
1

如果您可以使用 fileCopy 部署您的应用程序,那么自定义 TFS 工作流就很容易做到这一点。

在这些文章的帮助下,我使用了 CopyDirectory 活动:

http://www.ewaldhofman.nl/post/2010/11/09/Part-14-Execute-a-PowerShell-script.aspx

http://geekswithblogs.net/jakob/archive/2010/09/01/tfs-team-build-2010-how-to-place-the-build-output.aspx

非常简单明了。

  • 我使用对所需共享具有写入权限的用户帐户配置了构建服务。

  • 接下来,我创建了 CopyDirectory 工作流程步骤,将源配置为 BuildDetail.DropLocation +“_PublishedWebsites”,并为目标创建了一个参数,我称之为“DeployPath”,可以在构建配置中填写该参数。

  • 现在,在调用 CopyDirectory 活动之前,我仍然需要执行一个测试来检查构建是否成功。我提到的文章展示了如何做到这一点。他们还教授如何调用 powershell 脚本而不是 CopyDirectory。

于 2011-09-16T21:57:50.720 回答