使用MSDeploy将buildresult复制到targetserver

时间:2013-04-04 08:09:37

标签: asp.net-mvc visual-studio-2010 msdeploy webdeploy

有一个带有批处理文件的webproject,它生成目标服务器上所需的所有文件,并将它们放在“/ Deployable”文件夹中。

批处理文件非常复杂,因为项目包含一个插件系统,所有插件都需要复制到某个位置。

当我使用webdeploy部署到目标服务器时,它会按照您的期望发生:复制了一些所需的程序集,但不是批处理文件中指定的文件。

我的计划是首先执行批处理文件,然后使用webdeploy将文件夹“/ Deployable”复制到targetserver。这可以通过webdeploy来完成吗?

这是我在Visual Studio部署menue中看到的:enter image description here

这是生成的发布配置文件

<?xml version="1.0" encoding="utf-8"?> <publishData>
<publishProfile publishUrl="http://myserver/msdeployagentservice"
deleteExistingFiles="False" 
ftpAnonymousLogin="False" 
ftpPassiveMode="True"
msdeploySite="mysite/" 
msdeploySiteID="" 
msdeployRemoteSitePhysicalPath="" 
msdeployAllowUntrustedCertificate="False" 
msdeploySkipExtraFilesOnServer="False" 
msdeployMarkAsApp="False" 
profileName="publish_to_myserver" 
publishMethod="MSDeploy" 
replaceMatchingFiles="True" 
userName="myuser" 
savePWD="True" userPWD="xxx" SelectedForPublish="True" /> 
</publishData>>

1 个答案:

答案 0 :(得分:1)

我认为可以通过修改.csproj文件将第三方文件添加到webdeploy包中,但是,我从来没有使用它。


或者,您可以使用MSDeploy command-line client及其sync动词轻松实现相同的结果,方法是将/Deployable文件夹指定为-source参数和目标服务器的msdeploy服务为-dest,例如:

$(WebDeployToolPath)\msdeploy -verb:sync -source:dirPath='Deployable\' -dest:dirPath='$(DeployDirectoryLocalPath)',computerName=$(DeployTargetURL),userName='$(DeployUserName)',password='$(Password)',authType='Basic' -verbose -allowUntrusted

取代:

  • $(WebDeployToolPath) - 包含msdeploy可执行文件的文件夹的完整路径(例如c:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe
  • Deployable\ - 您要复制到目标服务器的文件夹的完整路径。
  • $(DeployDirectoryLocalPath) - 目标服务器上目标文件夹的完整本地路径。
  • $(DeployTargetURL) - 网络部署服务网址(例如https://192.168.142.55:8172/MsDeploy.axdhttp://myserver/msdeployagentservice
  • $(DeployUserName) - 用于部署的用户名(应该是Win 2003的管理员)
  • $(Password) - 用户密码。

它就是 - 这个命令会将Deployable\文件夹与$(DeployDirectoryLocalPath)文件夹同步(即使内容完全匹配)。

您可以将其包装到.csproj文件中的msbuild目标中:

 <PropertyGroup>
     <DeployTargetURL Condition="'$(DeployTargetURL)'==''">https://192.168.142.55:8172/MsDeploy.axd</DeployTargetURL>
     <DeployUserName Condition="'$(DeployUserName)'==''">tergetServer\Administrator</DeployUserName>
     <Password Condition="'$(Password)'==''">AdminPassword</Password>
     <WebDeployToolPath Condition="'$(WebDeployToolPath)'==''">c:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe</WebDeployToolPath>

<Target Name="Deploy">
 <Exec Command="&quot;$(WebDeployToolPath)&quot;\msdeploy -verb:sync -source:dirPath='Deployable\' -dest:dirPath='$(DeployDirectoryLocalPath)',computerName=$(DeployTargetURL),userName='$(DeployUserName)',password='$(Password)',authType='Basic' -verbose -allowUntrusted " />
</Target>

然后通过以下方式从命令行运行它:

%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MyProject.proj /t:Deploy*