如何在TF Build 2012中处理多个和常见的依赖关系?

时间:2015-06-15 14:09:02

标签: tfs msbuild tfs2012 workflow-foundation-4 tfsbuild

我最近开始在门控办理登机手续时自定义我的构建活动,只使用MSBuild来管理我的任务。它的工作相对较好。 但问题是:任务工作流程完全基于先前关于任务执行时间到optime并行性能的知识。以下是我的工作流程的恢复版本,以便您可以了解问题

  • 两个主要目标:执行一些测试并验证数据库迁移
  • 要执行测试,我必须构建解决方案,构建数据库项目并发布数据库
  • 要验证数据库迁移,我还需要构建和发布数据库(不能与执行测试的数据库相同)并且需要做一些"额外的东西"。

为了优化我的工作流程,我想并行运行解决方案的构建,"额外的东西"以及数据库的构建/发布,但我不想混合不必要的依赖,比如等待构建解决方案的数据库迁移或等待"额外的东西"的测试执行。

在MSBuild和WWF4中,我只知道如何通过在一轮中执行所有依赖项来并行化活动,然后执行另一组依赖项......

有更好的方法吗?我的意思是,定义工作流程以便自动解决和优化依赖关系。

P.S。:我正在使用TFS 2012。

更新 我已经做了两次并行测试构建我的项目解决方案,看看会发生什么。原来一个MSBuild节点在尝试构建我的解决方案之前等待另一个节点完成,然后说它是最新的。例:

<Project>
    <ItemGroup>
        <Project Include="MyProject.sln" />
        <Project Include="MyProject.sln" />
    </ItemGroup>

    <Target Name="Build">
        <MSBuild Projects="@(Project)" Targets="Build" BuildInParallel="true" />
    </Target>
</Project>
<!-- When I check the build log it says 
    1> Project is building MyProject.sln (2) ...
    1> Project is building MyProject.sln (2:2) ...
    2> Building with tools...
    2> ...
    2:2> Building with tools...
    2> ...
    2> ...
    2> ...
    2> Done building
    2:2> Target ... skipped because it was previously built successfully
    2:2> Done building
-->

这是一种理想的行为,但是当我尝试依赖它来构建我的构建工作流程时,我的项目同时构建了两次,给了我很多错误。

1 个答案:

答案 0 :(得分:0)

您可能会受益于将所有集成测试移至已部署的环境,而不是在构建期间执行它们。首先,构建服务器适合于该任务,正如您所发现的那样,其次是您正在阻止构建队列。

理想情况下,您应该只在构建服务器上运行单元测试并延迟集成测试。我会使用发布管理工具在构建之后自动部署我的应用程序,然后运行集成测试。我使用Visual Studio的Release Management(适用于2012),但章鱼部署也是一个很好的解决方案。

http://nakedalm.com/create-release-management-pipeline-professional-developers/