2010-02-11 65 views
0

我们正在评估部署MSBuild和Nant的过程。我们可能推出我们自己的工具。一个不同的业务部门 - 我们称之为DeptA - 真的想拥有这个能力,就像DeptA中的某个人阅读脚本并看看它会做什么一样。目前我们使用.bat文件来做到这一点。我们讨厌蝙蝠文件。讨厌的讨厌的蝙蝠文件的。但是如果我们要求DeptA学习一种新的脚本语言(nant,msbuild),他们可能会抵抗。部署工具:获取该工具在不执行部署脚本的情况下执行的操作列表

理想情况下,选择的构建工具将能够在不做任何其他事情的情况下生成一系列操作。沿着线:

  • 停止服务ABC的服务器ž
  • 停止服务DEF对服务器ž
  • 复制所有文件从 \服务器\迪拉\ DIRB到\服务器2 \ DIRC
  • 开始服务ABC对服务器ž
  • 在服务器ž
  • 运行的dir 所有脚本\服务器\迪拉\ DIRC
启动服务DEF

MSBuild可以做到这一点吗?恶性?没有我重新学习XSL?

回答

1

如果我是你,我实际上会混合MSBuild和MSDeploy。你应该让你的MSBuild脚本执行像启动/停止服务等操作。然后让MSDeploy到文件副本。使用MSDeploy,您可以使用-whatif开关来指示您只需要执行操作的报告,而不是实际执行操作。不幸的是,MSBuild不提供这种开箱即用的选项,您必须将其“构建”到脚本中。你可以用属性和条件来做到这一点。例如,它可能是这个样子:

<Project ...> 
    <PropertyGroup> 
     <!-- 
      Create the property to use, and declare a default value. 
      Here I've defaulted this to true because it is better to force the 
      caller to explicitly specify when to perform the action instead of it 
      being the default. 
     --> 
     <SimulateExecution Condition= '$(SimulateExecution)'==''>true</SimulateExecution> 
    </PropertyGroup> 

    <Target Name="Deploy"> 
     <Message Text="Deploy started" /> 

     <Message Text="Stop service ABC on server Z"/> 
     <WindowsService ... Condition=" '$(SimulateExecution)'=='false' "/> 

     <Message Text="Stop service DEF on server Z"/> 
     <WindowsService ... Condition=" '$(SimulateExecution)'=='false' "/> 

     <!-- Call MSDeploy with the Exec task. --> 
     <PropertyGroup> 
      <MSDeployCommand>...\msdeploy.exe YOUR_OPTIONS_HERE</MSDeployCommand> 

      <!-- Append the -whatif to the command if this is just a simulation --> 
      <MSDeployCommand Condition= '$(SimulateExecution)'=='false' ">$(MSDeployCommand) -whatif</MSDeployCommand> 
     </PropertyGroup> 


     <Exec Command="$(MSDeployCommand)" /> 

     ... More things here 
    </Target> 
</Project> 

对于您可以使用WindowsService任务从MSBuild Extension Pack服务行动。你将不得不填补那里的空白。

当您调用MSDeploy时,您应该只使用Exec任务来调用带有您的参数的msdeploy.exe。如果你通过了这个愿望,它不会实际执行这些行为,只是报告它会做什么。这些将被记录到msbuild日志中。所以如果你用/ fl调用msbuild.exe,你会得到这些操作写入文件。我采用这种方法时遇到的唯一问题是,对于msdeploy.exe,您多次必须使用完整路径(那些没有..),这有时会非常棘手,因此请谨慎使用此类路径。

+0

@jcollum:那不够详细吗?在此没有听到任何关于你的消息。 – 2010-02-19 06:05:11

+0

感谢您的信息。这似乎是我正在寻找的。 – jcollum 2010-03-02 20:09:35