有没有办法在单个构建中使用msbuild创建多个部署?

时间:2014-01-29 14:34:25

标签: deployment msbuild bamboo

我多次使用msbuild命令行为我的dev / test / production网站创建部署zip文件。我已经为每个配置了参数和配置xml。我想知道我是否可以将我对msbuild的3个调用浓缩为1,并让它同时构建所有三个?

现在我必须运行

msbuild.exe myproject.sln /T:Build /p:DeployOnBuild=True /p:PublishProfile="Dev Server"
msbuild.exe myproject.sln /T:Build /p:DeployOnBuild=True /p:PublishProfile="Prod Server"

我正在使用的持续部署解决方案(竹子)由于某种原因(我有一张打开的票,他们也很困惑)正在为这个多次调用msbuild而苦苦挣扎。我正在努力简化事情。

2 个答案:

答案 0 :(得分:1)

我有一个模板用于并行构建同一解决方案的所有skus。

这与Stijn的方法相同,后者使用ItemGroup作为项目定义而不是特定属性的一系列选项+ msbuild任务将同时构建两者,节省您的时间并冒泡任何配置问题当并行建设时。

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <SolutionToBuild Include="$(MSBuildThisFileDirectory)\MyProject.sln">
        <Properties>DeployOnBuild=True;PublishProfile="Dev Server"</Properties>
    </SolutionToBuild>
    <SolutionToBuild Include="$(MSBuildThisFileDirectory)\MyProject.sln">
        <Properties>DeployOnBuild=True;PublishProfile="Prod Server"</Properties>
    </SolutionToBuild>
  </ItemGroup>
  <Target Name="Build">
    <MsBuild BuildInParallel="true" ContinueOnError="true" Projects="@(SolutionToBuild)" />
  </Target>
  <Target Name="Clean">
    <MsBuild BuildInParallel="true" ContinueOnError="true" Projects="@(SolutionToBuild)" Targets="Clean" />
  </Target>
</Project>

答案 1 :(得分:0)

您只能在命令行上调用多个不同的目标,但不能为属性提供多个不同的值。至少不是以我所知道的方式。然而,解决方法很简单,比命令行更容易扩展,以及典型的msbuild工作方式:创建如下所示的主构建文件,并从Bamboo调用它而不是解决方案。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         DefaultTargets=Build>
  <Target Name="Build">
    <ItemGroup>
      <PublishProfiles Include="Dev Server"/>
      <PublishProfiles Include="Prod Server"/>
    </ItemGroup>
    <MsBuild Projects="myproject.sln" Targets="Build" 
             Properties="DeployOnBuild=True;PublishProfile=%(PublishProfile.Identity)"/>
  </Target>
</Project>

(这将针对MsBuild myproject.sln列表中的每个项目调用PublishProfiles一次,其属性如图所示)