我有一些长时间运行的集成测试,当我提交源代码控制时,由TeamCity服务器自动运行。
TeamCity允许我通过限制同时构建来阻止这些任务同时占用所有构建代理,但是我想知道当新配置启动时TeamCity是否可以取消此配置中当前正在运行的任务?
在这个环境中,一旦有新的源代码控制提交,旧的集成测试运行就无关紧要了,所以我不希望服务器浪费时间来运行旧版本的测试。
答案 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进行检查。
主要集成测试从专用作业配置运行,该配置使用与前导配置关联的构建完成触发器。
此设置使得查询正在运行的作业非常简单,如果有更新的工作要做,可能需要取消。所以步骤变为: