是否可以为代理定位单个构建代理但不指定哪个代理?

时间:2014-02-26 16:06:46

标签: msbuild tfs2013

我们有两个构建代理程序在同一服务器上运行,为正在开发和支持的四个项目提供服务。

我们希望尽可能快地构建项目,即我们不希望为每个项目保留特定的代理,因为即使另一个代理可用,这可能会将一些构建放入队列中。

由于我们有针对本地安装在构建服务器上的数据库的单元和集成测试,我们需要有一些方法来确保同一项目的多个签入不会在不同的构建代理上并行运行,因为这会导致冲突在关于数据库的测试中。

那么我们如何设置构建,以便特定项目仅在项目当前没有正在运行的其他构建时触发构建,否则将构建放入队列中,以便在该项目的上一个构建完成后启动?

有些构建需要一个小时才能完成,因此让开发人员记住触发新构建并不是真的可行。

以下方案可能有助于理解这个问题:

  1. 检查项目A是否会触发构建代理1
  2. 的构建
  3. 检查项目B是否触发构建代理2
  4. 的构建
  5. 项目A的另一个签到是放入队列
  6. 项目B的构建完成
  7. 项目A的第二次签到给予代理2(触发整合测试中的碰撞)
  8. 我们想要的是以下

    1. 检查项目A是否会触发构建代理1
    2. 的构建
    3. 检查项目B是否触发构建代理2
    4. 的构建
    5. 项目A的另一个签到是放入队列
    6. 项目B的构建完成
    7. 由于项目A的构建仍处于活动状态,因此第二次签入尚未开始
    8. 项目A的构建完成
    9. 项目A的新构建从构建代理
    10. 开始

2 个答案:

答案 0 :(得分:1)

我的建议是在该服务器上再添加2个代理,这样每个项目就有一个代理。然后使用Build Agent标记(或构建代理名称)将每个项目构建定义绑定到专用于它的代理。

答案 1 :(得分:1)

尝试使用“Rolling Build”而不是CI构建,如果构建当前处于活动状态,则在第一个构建完成之前,不会启动相同类型的新构建。我不确定它是100%你想要的,但它非常接近。

滚动版本将累积签到,所以如果有20个签到惠斯特第一个版本正在运行,那么所有20个chekins将包含在第二个版本中。它不会排队20个版本。