Deployment 如何从一个MSBuild脚本调用多个MSBuild脚本

Deployment 如何从一个MSBuild脚本调用多个MSBuild脚本,deployment,msbuild,teamcity,Deployment,Msbuild,Teamcity,我有3个用于部署的MSBUild脚本, 1用于部署UI 1用于部署两个web服务。 1用于部署后端服务 现在,我想创建一个一键部署MSBuild脚本,它将调用上述3个脚本,可以从TeamCity服务器执行 因此,如何从不同的MSBuild脚本调用这三个MSBuild脚本。有一个问题。我没有使用TeamCity Server,但一个可能的替代解决方案是将三个构建脚本组合成一个脚本。并将三个单独脚本的任务放入主构建文件中的单独目标中。因此,与三个单独的构建脚本不同,您有一个构建脚本,其中包含三个目标

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

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


因此,如何从不同的MSBuild脚本调用这三个MSBuild脚本。

有一个问题。

我没有使用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>

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

<Import Project="ProjectPath1" Condition="'$(DeployUI)'!=''" />
<Import Project="ProjectPath2" Condition="'$(DeployWebServices)'!=''" />
<Import Project="ProjectPath3" Condition="'$(DeployBackendServices)'!=''" />

<Target Name="DeployTheWorld">
    <Message Text="Deploying..." />
</Target>

然后对要在已导入的单独项目文件中运行的目标使用:

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


这将使您能够灵活地从TeamCity内部定制部署

这是合并所有3个组件的有效选项,但我希望能够独立部署组件(如果我选择),并且不希望在两个脚本中复制生成脚本内容。您可以通过在生成文件中使用条件语句单独部署组件。如果使用条件语句,则也不必维护重复的脚本文件。只需在调用构建文件时提供正确的目标,您就完成了?在上面提到的任务中,我没有看到调用构建文件/脚本的方法,这正是您的问题所要求的。MSBuild任务允许您使用某些选项构建项目,但您希望使用构建文件进行构建,而构建文件很可能会执行编译和部署以外的其他操作(例如更新相关配置文件)。在这种情况下,仅使用MSBuild任务将不起作用。如果我遗漏了什么,请告诉我。我链接的页面上有很多代码片段,超出了本文的范围;)