我怎样才能让TFS2010通过MSBUILD为我运行MSDEPLOY?
Vishal Joshi 提供了一个很好的PDC讲述,介绍了Visual Studio 2010中的新MSDEPLOYfunction,以及如何在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下运行的pipe理服务。 我试过使用两个。
我正在使用的参数:
/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)未经授权。
IIS7 +相关的答案….
好的 – 这是我最终做的。 或多或less,在这个线索/问题之后, Simon Weaver的post。
但是,当涉及到MSBuild设置..这里的大多数人使用以下设置: /p:MSDeployPublishMethod=RemoteAgent
这是/p:MSDeployPublishMethod=RemoteAgent
用于IIS7。 使用此设置意味着TFS尝试连接到以下URL: https://your-server-name/MSDEPLOYAGENTSERVICE
但要访问该URL,需要进行身份validation的用户必须是Admin。 这是fraked。 (而且你需要pipe理覆盖规则thingy打勾)。 这个url是IIS6我认为。
当您尝试使用RemoteAgent进行连接时,以下是标准错误消息:
标准401 Frak Off你吸RemoteAgent,错误
C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets(3588):Web部署任务失败(远程代理(URL http:// your-web- server / MSDEPLOYAGENTSERVICE ),请确保远程代理服务已安装并在目标计算机上启动。)确保站点名称,用户名和密码正确无误。 如果问题未解决,请联系您的本地或服务器pipe理员。 错误详细信息:无法联系远程代理(URL http:// your-web-server / MSDEPLOYAGENTSERVICE )。 确保远程代理服务已安装并在目标计算机上启动。 收到不受支持的响应。 响应标题'MSDeploy.Response'是'V1',但'v1'是预期的。 远程服务器返回错误:(401)未经授权。
所以..你需要改变你的MSDeployPublishMethod
到这个:
/p:MSDeployPublishMethod=WMSVC
WMSVC
代表Windowspipe理器服务。 它基本上是远程代理上的一个新的包装,但现在允许我们更正提供用户名和密码..用户不必是pipe理员! (快乐!)所以,现在你可以更正设置哪些用户你想访问..每个网站..
它现在也试图打到url: https://your-web-server:8172/MsDeploy.axd
< – 这正是Visual Studio 2010 Publish
窗口所做的! (OMG – > PENNY DROPS !! BOOM!)
这是我最后的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
注意用户名里面有域名? 雅需要那里。 另外,在我的照片中,我允许我们的域用户访问网站进行pipe理。 因此,我添加的新用户帐户(TFSBuildService)对Domain Users
组具有成员身份…所以这就是一切工作原理。
现在 – 如果你读了所有这一切,有一个lolcat(因为他们SOOOOOOOO 2007)….
这是最后为我工作的步骤。 我想与RemoteAgent合作,但不pipe我尝试了什么,都无法工作。
你不必这样做,但这是我如何工作
- configurationWMSVC
- 确保服务已启动
- configuration一个IIS用户(点击IIS中的TOP MOST SERVERNAME)并转到“IISpipe理员用户”。 我build议使它不同于你的Windows名称。
- 确保WMSVC(本地服务)的用户帐户对您正在使用的IIS目录具有写入权限
- 在我的情况下,我正在使用SSL证书(即使它正在打本地主机)。
记住这些都是在TFS Build定义中添加的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实际上是指向127.0.0.1的hosts文件条目的本地框。 本地主机也可能在这里工作。
有用的文章:
解决MSDeploy问题
更多故障排除
不幸的是,目前没有很多关于此的信息。 不过,我会在这封邮件的最后给你一些提示。
关于您的问题,我之前在尝试使用MSDeploy进行部署时看到了这一点,而且我运行的帐户没有权限在目标计算机上执行部署。 因此,您需要查看运行您的构build的帐户,并查看此帐户是否有权部署到目标计算机。 如果没有,那么你有几个select; 授予构build用户的权利,或传递用户名/密码。
如果你想传递值,那么你将不得不定义一个名为MsDeployDestinationProviderSetting
的项目,它的元数据将包含必要的值。
所以在你的项目文件(或通过传入的属性)定义如下所示。
<PropertyGroup> <UserName>USERNAME-HERE</UserName> <Password>PASSWORD-HERE </PropertyGroup>
关于哪里可以find文件,就像我之前说过的,那里还没有多less文件。 但是由于整个Web发布pipe道被捕获在MSBuild目标和任务中,如果你熟悉MSBuild,你可以自己学习很多东西。 如果您查看使用Visual Studio 2010创build的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
所以为了现在详细地学习这个话题,你必须检查这些文件并且自己学习。
我将会详细研究这些技术,但是这个技术不会出现一段时间,而且我还有很多东西需要弄清楚。
你可以试用用户名/密码协议,让我知道它是否适合你?
我有一个类似的问题,解决scheme是有以下参数:
/ p:MSDeployPublishMethod = RemoteAgent
这里是我使用的所有参数。
/ p:DeployOnBuild = True / p:DeployTarget = MSDeployPublish / p:MSDeployPublishMethod = RemoteAgent / p:MsDeployServiceUrl = http:// my-server-name / p:username = myusername / p:password = mypassword
注:我没有使用DeployIisAppPath,因为我正在构build一个解决scheme并试图一次构build三个Web应用程序。 另外我想你的MsDeployServiceUrl应该只是http://staging.example.com
看来,使用MSDeployPublishMethod MSBuild的InProc(可能是默认值)时,会忽略MsDeployServiceUrl并始终尝试部署到本地服务器。 我将其更改为RemoteAgent,并成功部署了所有三个Web应用程序。 我注意到Package文件不再包含在MyWebApplication_Package文件夹中,但对我来说这不是什么大问题。
请注意,您也可以设置DeployTarget = Package – 这将准备包但不能马上部署。 欲了解更多信息,请参阅这篇博文 。
对我来说,问题在于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=
你只需要指定服务器名称,而不是完整的path(不需要http)。
请注意UserName留空以解决NTLM身份validation错误(这种方式使用TFS构build代理的凭据进行部署)。 看到接受的答案在这里
以下是我如何工作。 这是与Webdeploy 2.0。 我正在部署在我们的生成机器相同的域到一个开发的Web服务器机器Windows Server 2008 R2。 我用来部署的帐户是在两台计算机上具有pipe理员权限的域上的服务帐户。 我的解决scheme包括几个unit testing项目,一个mvc3项目,以及解决scheme下的一对库。 如果您未在要部署的服务器上安装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:密码=密码
-
我最初挣扎的项目是“默认网站/ YourApplicationNameHere”引用的部分错误:
MSBUILD:错误MSB1008:只能指定一个项目。
在Default Web Site / YourApplicationNameHere周围没有引号时会发生这种情况
-
我得到的下一个错误是因为我部署凭据中的用户名和密码错误。 它给了这个错误:
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)无法联系,请确保目标计算机上安装并启动了远程代理服务。)确保站点名称,用户名和密码正确无误。 如果问题未解决,请联系您的本地或服务器pipe理员。 错误详细信息:无法联系远程代理(URL https:// devserver02:8172 / msdeploy.axd?site =默认网站)。 确保远程代理服务已安装并在目标计算机上启动。 收到不受支持的响应。 响应标题'MSDeploy.Response'是'',但'v1'是预期的。 远程服务器返回错误:(401)未经授权。
这是因为我在/ p:UserName = / p:Password =中的用户名和密码没有包含用户的域名。 即使它在该用户下运行,也不会部署。 所以我在浏览器中直接点击https:// devserver02:8172 / msdeploy.axd来确保它正在运行,并确保用户名和密码正常工作。 这是我注意到我必须在域/用户才能使其工作。
我希望这是可以回复我find了一些其他可怜的灵魂,发现这些错误,这可能有助于…
如果您可以使用fileCopy部署应用程序,则可以轻松定制TFS工作stream程来执行此操作。
我已经使用了CopyDirectory活动,在这些文章的帮助下:
http://www.ewaldhofman.nl/post/2010/11/09/Part-14-Execute-a-PowerShell-script.aspx
和
非常简单直接。
-
我使用具有所需共享的写入权限的用户帐户configuration构build服务。
-
接下来,我创build了CopyDirectory工作stream步骤,将源代码configuration为BuildDetail.DropLocation +“_PublishedWebsites”,并为目标创build了一个我称之为“DeployPath”的参数,该参数可以填充到构buildconfiguration中。
-
现在我仍然需要实现一个testing,在调用CopyDirectory活动之前检查构build是否成功。 我提到的文章显示如何做到这一点。 他们还教导如何调用PowerShell脚本而不是CopyDirectory。
- Visual Studio 2013:数据库项目MSBuild错误
- VSTS 2010 SGEN:错误:无法加载文件或程序集(从HRESULTexception:0x80131515)
- 升级到.NET 4.5后MSBuild部署失败
- 什么时候应该将copy-local设置为true,何时不应该这样做?
- CodeDom提供程序types“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider”找不到
- MSBuild在Visual Studio 2012解决scheme的TeamCity中
- 有没有办法自动包含内容文件到asp.net项目文件?
- 使用Visual Studio 2012时SignTool.exe或“Windows Kits”目录的path
- 在Build Server上构build不带Visual Studio的ASP.NET 4.5