2015-05-04 71 views
0

我有两个Jenkins作业,COMPILE和TEST,COMPILE触发器测试,COMPILE很快,测试很慢。 COMPILE重新创建TEST使用的数据,因此如果COMPILE在TEST运行时运行,TEST可能会因必要的数据暂时不可用或不完整而失败。如何终止另一个Jenkins作业?

有时,COMPILE会被触发很多(通过CMS,繁忙的开发)。标准的方法是通过一个锁来同步COMPILE和TEST,这样就不会同时运行,而是等待另一个在启动之前完成。这种等待并不适合我,因为它会延迟COMPILE作业太多。

另一种可能是将TEST转为并发运行,但在我的情况下,TEST需要太多资源才能同时运行。因此,我现在的方法是配置COMPILE,使其首先中止正在运行的TEST作业(如果正在运行),然后开始工作(最终再次触发TEST)。几个很快执行的COMPILE构建将会开始一个TEST构建,这将全部中止(灰色泡泡)。只有最后一个测试版本才会完成,并显示正常的红色或绿色(或黄色)泡泡。但对我而言,这已经足够了(我接受这样一个缺点,即我无法准确检测到哪个提交违反了构建)。

现在的问题是:我如何使COMPILE中止测试版本? (最好以一种优雅的方式。)

我只找到了一种方式generally abort a job from the outside using Jenkins's REST interface,但这似乎不是很优雅。有没有更优雅的方式,也许使用我不知道的Jenkins内部功能,或者使用合适的插件?

+0

您可以通过Groovy API取消作业。 这里参见例如:[取消排队构建并中止执行使用Groovy詹金斯构建] [1] [1]:http://stackoverflow.com/questions/12305244/cancel-queued-builds-然后放弃执行构建使用groovy-for-jenkins – Owbea

回答

0

我建议将两项工作合并为一项工作。这将允许多个同时执行,并且如果编译失败仍然会失败。

+1

但是它会有几个缺点,现在我在瞄准的方向上具有优势。我无法区分“C失败的行为”和“T失败的行为”之间的连接,而且我连续几次不加速地运行快速C,而没有被缓慢的T延迟。 – Alfe

+0

https://wiki.jenkins.io/display/JENKINS/Conditional+BuildStep+Plugin将允许您只在满足特定条件时运行TEST。 – jimdrang

相关问题