Msbuild 是否可以将单个生成代理作为代理的目标,但不指定哪个代理?

Msbuild 是否可以将单个生成代理作为代理的目标,但不指定哪个代理?,msbuild,Msbuild,我们有两个构建代理,它们运行在同一台服务器上,为四个正在开发和支持中的项目提供服务 我们希望尽快构建项目,也就是说,我们不希望为每个项目保留特定的代理,因为这可能会将一些构建放入队列中,即使另一个代理可用 由于我们有针对本地安装在buildserver上的数据库的unit和integrationstests,因此我们需要有某种方法来确保同一项目的多个签入不会在不同的构建代理上并行运行,因为这会在有关数据库的测试中产生冲突 那么,我们如何设置生成,使特定项目仅在当前没有其他项目的生成运行时才会触发

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

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

由于我们有针对本地安装在buildserver上的数据库的unit和integrationstests,因此我们需要有某种方法来确保同一项目的多个签入不会在不同的构建代理上并行运行,因为这会在有关数据库的测试中产生冲突

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

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

以下场景可能有助于理解该问题:

  • 发生项目A的签入,触发生成代理1上的生成
  • 发生项目B的签入,从而触发生成代理2上的生成
  • 另一个签入发生在项目A上,该项目是放入队列
  • 项目B的构建完成
  • 项目A的第二个签入被提供给构建代理2(在integrationstests中触发冲突)
  • 我们想要的是以下内容

  • 发生项目A的签入,触发生成代理1上的生成
  • 发生项目B的签入,从而触发生成代理2上的生成
  • 另一个签入发生在项目A上,该项目是放入队列
  • 项目B的构建完成
  • 由于项目A的生成仍处于活动状态,因此第二次签入尚未启动
  • 项目A的构建完成
  • 项目A的新生成在任一生成代理上启动

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

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


    滚动构建将累积签入,因此如果在第一个构建运行时有20个签入,那么所有20个签入都将包含在第二个构建中。它不会将20个构建排队。

    我想这是最简单的解决方案,因此,如果没有其他人提出我们将使用的解决方案。因此,如果我为一个特定的重新构建创建滚动构建,那么该定义在同一时间将只有一个构建处于活动状态?即使构建需要30分钟,并且滚动构建设置为每隔一分钟?如果是这样的话,这就是我正在寻找的解决方案,这是正确的,滚动构建“堆栈”。如果配置了滚动生成(未设置时间限制),则只有一个生成将运行,下一个生成将在第一个生成完成后立即触发。如果您的滚动构建设置了30分钟的时间限制,并且第一次构建需要20分钟,那么第二次构建将在第一次完成10分钟后触发。最后,如果您有一个30分钟时间限制的滚动构建集,并且您的第一个构建需要40分钟,那么第二个构建将在第一个构建完成时触发