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下运行管理服务.我试过用这两个.
我正在使用的Args:
/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)未经授权.
好的 - 这就是我最终做的事情.或多或少,跟随Simon Weaver在这个主题/问题中的帖子.
但是,当涉及到的MSBuild设置..这里大多数人都使用以下设置:/p:MSDeployPublishMethod=RemoteAgent
这是不对的IIS7.使用此设置意味着TFS尝试连接到URL:https://your-server-name/MSDEPLOYAGENTSERVICE
但是要访问该URL,要进行身份验证的用户需要是Admin.哪个是破碎的.(并且您需要勾选管理员覆盖规则).这个网址是我认为的IIS6.
当您尝试使用RemoteAgent进行连接时,这是标准错误消息: -
C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3588):Web部署任务失败.(远程代理(URL http:// your-web-)无法联系服务器/ MSDEPLOYAGENTSERVICE.确保在目标计算机上安装并启动了远程代理服务.)确保站点名称,用户名和密码正确无误.如果问题仍未解决,请与您当地或服务器管理员联系.错误详细信息:无法联系远程代理(URL http:// your-web-server/MSDEPLOYAGENTSERVICE).确保在目标计算机上安装并启动了远程代理服务.收到了不受支持的回复.响应标题'MSDeploy.Response'为'V1',但预计为'v1'.远程服务器返回错误:(401)未经授权.
那么..你需要改变你的意思MSDeployPublishMethod
:
/p:MSDeployPublishMethod=WMSVC
WMSVC
Windows Manager Service 的代表.它基本上是远程代理的新包装器,但现在允许我们更正提供用户名和密码..用户不必是管理员!(快乐!)所以现在你可以纠正设置你想要访问哪些用户..每个网站..
它现在也尝试点击url:https://your-web-server:8172/MsDeploy.axd
< - 这正是Visual Studio 2010 Publish
窗口的作用!(天啊 - > 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
请注意,用户名中包含域名?你需要那个,那里.此外,在我的图片中,我允许我们的DOMAIN用户访问该网站以进行管理.因此,我添加的新用户帐户(TFSBuildService)具有该Domain Users
组的成员资格......所以这一切都是如此.
现在 - 如果你已经阅读了所有这些,请拥有一个lolcat(因为它们是SOOOOOOOO 2007)....
这是最终对我有用的步骤.我想要使用RemoteAgent,但无论我尝试什么,都无法实现.
您不必完全按照这样做,但这就是我使用它的方式
配置WMSVC
确保服务已启动
配置IIS用户(单击IIS中的TOP MOST SERVERNAME)并转到"IIS Manager Users".我建议让它与你的Windows名称不同.
确保WMSVC的用户帐户(对我来说是LOCAL SERVICE)对您正在使用的IIS目录具有写入权限
在我的情况下,我正在使用SSL证书(即使它正在击中localhost).
请记住,这些是在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.Localhost也可能在这里工作.
有用的文章:
解决MSDeploy问题
更多故障排除
不幸的是,目前没有太多关于此的信息.不过,我会在这条消息的末尾给你一些提示.
关于你的问题,我在尝试使用MSDeploy进行部署之前已经看过这个问题,而我运行的帐户没有在目标计算机上执行部署的权限.因此,您需要查看运行构建的帐户,并查看此帐户是否有权部署到目标计算机.如果没有,那么你有几个选择; 授予构建用户权限,或者传递用户名/密码.
如果要传递值,则必须定义一个名为的项MsDeployDestinationProviderSetting
,其元数据必须包含必要的值.
因此,在您的项目文件中(或通过传入的属性)定义如下所示的内容.
USERNAME-HERE PASSWORD-HERE
关于在哪里可以找到文档,就像我之前说的还不多.但是,由于整个Web发布管道都是在MSBuild目标和任务中捕获的,因此如果您熟悉MSBuild,您可以自己学习.如果您查看使用Visual Studio 2010创建的Web项目的.csproj(或.vbproj)文件,您会注意到如下语句:
这将导入位于的
%ProgramFiles(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets
文件,然后依次导入此文件
%ProgramFiles(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets
因此,为了现在详细了解这个主题,您必须检查这些文件并自己学习.
我将开始研究将要详细介绍这些技术的内容,但它不会出现很长一段时间,而且我还有很多东西需要弄清楚这些东西.
你可以尝试用户名/密码交易,让我知道它是否适合你?
我有类似的问题,解决方案是有以下参数:
/ 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,因为我正在构建一个解决方案并尝试一次构建三个Web应用程序.另外我认为你的MsDeployServiceUrl应该只是http://staging.example.com
当使用InProc(可能是默认值)时,似乎MSDeployPublishMethod MSBuild忽略MsDeployServiceUrl并始终尝试部署到本地服务器.我将其更改为RemoteAgent并成功部署了所有三个Web应用程序.我注意到包文件不再包含在MyWebApplication_Package文件夹中,但这对我来说不是什么大问题.