【问题标题】:How do you call multiple MSBuild scripts from one MSBuild script如何从一个 MSBuild 脚本调用多个 MSBuild 脚本
【发布时间】:2009-07-31 15:34:07
【问题描述】:

我有 3 个用于部署的 MSBUild 脚本, 1 用于部署 UI 1 用于部署几个 Web 服务。 1 用于部署后端服务。

现在我想创建一个一键部署 MSBuild 脚本,它会调用上述所有 3 个脚本,可以从 TeamCity 服务器执行。

那么如何从不同的 MSBuild 脚本调用这三个 MSBuild 脚本。

【问题讨论】:

    标签: deployment msbuild teamcity


    【解决方案1】:

    有一个MSBuild MSBuild task

    【讨论】:

    • 我链接的页面上有很多sn-ps代码,比这篇文章更适合;)
    【解决方案2】:

    在 MSBuild 4.0 中,一个选项可能是将conditionally import 3 个项目文件添加到您的一键部署 MSBuild 脚本中:

    <Import Project="ProjectPath1" Condition="'$(DeployUI)'!=''" />
    <Import Project="ProjectPath2" Condition="'$(DeployWebServices)'!=''" />
    <Import Project="ProjectPath3" Condition="'$(DeployBackendServices)'!=''" />
    
    <Target Name="DeployTheWorld">
        <Message Text="Deploying..." />
    </Target>
    

    然后在您希望在已导入的单独项目文件中运行的目标上使用AfterTargets feature

      <Target Name="DeployUI" AfterTargets="DeployTheWorld">
        <Message Text="Hello from DefaultAfterTarget"/>
      </Target>
    

    这将使您能够灵活地从 TeamCity 中自定义部署。

    【讨论】:

      【解决方案3】:

      我没有使用过 TeamCity Server,但一种可能的替代解决方案是将三个构建脚本合并到一个脚本中。并将三个单独脚本的任务放入主构建文件中的单独目标中。因此,不是三个单独的构建脚本,而是一个包含三个目标的构建脚本,即 deployUI、deployServices、deployBackend。以下未经测试的样本:

          <?xml version="1.0" encoding="utf-8" ?>
          <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="DefaultTarget" ToolsVersion="3.5">
      
          <Target Name="DefaultTarget">
                  <CallTarget Targets="deployUI" ContinueOnError="false"></CallTarget>
                  <CallTarget Targets="deployServices" ContinueOnError="false"></CallTarget>
                  <CallTarget Targets="deployBackend" ContinueOnError="false"></CallTarget> 
          </Target>
      
          <Target Name="deployUI">
                  <!-- Put UI deployment tasks here -->
          </Target>
      
          <Target Name="deployServices">
                  <!-- Put Services deployment tasks here -->
          </Target>
      
          <Target Name="deployBackend">
                  <!-- Put Backend deployment tasks here -->
          </Target>
      </Project>
      

      【讨论】:

      • 这是合并所有 3 个组件的有效选项,但如果我选择,我希望能够独立部署组件,并且不想在两个脚本中复制构建脚本内容。
      • 您可以使用构建文件中的条件语句单独部署组件。如果您使用条件语句,那么您也不必维护重复的脚本文件。只需在调用构建文件时提供正确的目标即可。
      • 旁注:我不确定接受的答案有什么帮助?在提到的任务中,我看不到调用构建文件/脚本的方法,这是您的问题所要求的。 MSBuild 任务允许您使用一些选项构建项目,但您希望使用构建文件进行构建,这些构建文件很可能会执行其他操作,而不仅仅是编译和部署(例如更新相关配置文件)。在这种情况下,仅使用 MSBuild 任务将不起作用。如果我遗漏了什么,请告诉我。
      猜你喜欢
      • 2011-12-06
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      相关资源
      最近更新 更多