TeamCity - 在开始新构建时,我可以取消当前运行的相同配置的构建吗?

时间:2015-01-28 11:19:15

标签: continuous-integration teamcity integration-testing

我有一些长时间运行的集成测试,当我提交源代码控制时,由TeamCity服务器自动运行。

TeamCity允许我通过限制同时构建来阻止这些任务同时占用所有构建代理,但是我想知道当新配置启动时TeamCity是否可以取消此配置中当前正在运行的任务?

在这个环境中,一旦有新的源代码控制提交,旧的集成测试运行就无关紧要了,所以我不希望服务器浪费时间来运行旧版本的测试。

3 个答案:

答案 0 :(得分:2)

我不认为这是可能的,我会说这是设计的。

想象一个允许这样做的世界,你永远不会知道哪个提交导致测试开始失败。如果你有足够的重叠提交,你可以有50个构建,然后才知道要运行的最终测试失败,并且不知道它是最后一次提交还是之前的那个导致它失败的49。

恕我直言,你会更好地集中精力制作,以便在不同的服务器上同时进行多次运行,以获得你想要的速度,而不是用洗澡水把婴儿扔出去

<强>更新

虽然我不认为这是开箱即用的支持,但如果我不得不这样做,我想我会看getting a notification when a build starts(似乎没有关于构建排队的通知,所以你会有允许多个构建同时运行以使其工作)然后你can use the API to do cancel the other builds:

你也可以使用API​​获得list of builds,所以应该可以取消所有不是最新的

答案 1 :(得分:1)

不,这是不可能的。您可以手动取消它。或者你可以添加一个安静的时间段(默认为60秒),这样当一些东西被推动时,构建不会立即开始。然后,如果一些提交在几秒钟或几分钟后到达,它们将被包含在TeamCity构建中。

答案 2 :(得分:1)

我的解决方案与Sam's update类似,但我会使用由提交源控件触发的“前导”配置。此作业全权负责检查您的任何集成测试作业是否已在运行,并根据需要stopping them with a REST API call进行检查。

主要集成测试从专用作业配置运行,该配置使用与前导配置关联的构建完成触发器。

此设置使得查询正在运行的作业非常简单,如果有更新的工作要做,可能需要取消。所以步骤变为:

  1. Preamble - 取消由VCS触发的任何正在运行的集成测试作业
  2. 集成测试 - 由“Preamble”构建完成触发