如何中止另一个 Jenkins 工作?
Posted
技术标签:
【中文标题】如何中止另一个 Jenkins 工作?【英文标题】:How To Abort Another Jenkins Job? 【发布时间】:2015-05-04 11:35:52 【问题描述】:我有两个 Jenkins 作业,COMPILE 和 TEST,COMPILE 触发 TEST,COMPILE 快,TEST 慢。 COMPILE 会重新创建 TEST 使用的数据,因此如果 COMPILE 在 TEST 运行时运行,则 TEST 可能会由于必要的数据暂时不可用或不完整而失败。
有时,COMPILE 会被触发很多(通过 CMS,忙于开发)。标准方法是通过锁同步 COMPILE 和 TEST,这样两者就不会同时运行,而是等待另一个完成后再开始。这种等待并不适合我,因为它会过多地延迟编译作业。
另一种方法可能是将 TEST 转换为并发运行,但在我的情况下,TEST 需要太多资源才能同时运行。
所以我现在的方法是配置 COMPILE,使其首先中止一个正在运行的 TEST 作业(以防一个正在运行)然后开始它的工作(最终最终再次触发 TEST)。然后,几个快速执行的 COMPILE 构建将各自启动一个 TEST 构建,该构建将全部中止(灰色气泡)。只有最后一个 TEST 构建将完成并显示一个像样的红色或绿色(或黄色)气泡。但这对我来说就足够了(我接受这样的缺点,即我无法准确检测到哪个提交破坏了构建)。
现在的问题是:如何让 COMPILE 中止 TEST 构建? (最好以优雅的方式。)
我只找到了generally abort a job from the outside using Jenkins's REST interface 的方法,但这似乎不是很优雅。有没有更优雅的方法,可能使用我不知道的 Jenkins 内部功能,或者使用合适的插件?
【问题讨论】:
您可以通过 Groovy API 取消作业。请参阅此处的示例:[取消排队的构建并中止使用 Groovy for Jenkins 执行构建][1] [1]:***.com/questions/12305244/… 【参考方案1】:我建议将这两个工作合并为一个工作。这将允许多个同时执行,并且如果编译失败仍然会失败。
【讨论】:
但它有几个缺点,现在在我所瞄准的方向上具有优势。我将无法区分(一目了然)“C 的动作失败”和“T 的动作失败”,而且我永远不会在不被慢速 T 延迟的情况下连续多次运行快速 C 的加速. wiki.jenkins.io/display/JENKINS/Conditional+BuildStep+Plugin 将允许您仅在满足某些条件时运行 TEST。【参考方案2】:您可以将节点的执行器数量设置为“1”。通过这个我们可以确保节点中一次只运行一个作业,即使它是并行执行的,它也会等待第一个作业完成然后启动第二个作业
【讨论】:
以上是关于如何中止另一个 Jenkins 工作?的主要内容,如果未能解决你的问题,请参考以下文章