停止Jenkins工作,以防更新的工作

时间:2012-04-23 12:47:34

标签: jenkins jenkins-plugins

是否可以指定,如果多次触发作业(A),先前的作业将从队列中删除,只有最新的作业留在队列中或者如果有足够的空闲插槽则启动?

提前致谢!

3 个答案:

答案 0 :(得分:4)

使用execute system groovy script步骤:

import hudson.model.Result
import jenkins.model.CauseOfInterruption

//iterate through current project runs
build.getProject()._getRuns().each{id,run->
  def exec = run.getExecutor()
  //if the run is not a current build and it has executor (running) then stop it
  if( run!=build && exec!=null ){
    //prepare the cause of interruption
    def cause = new CauseOfInterruption(){ 
      public String getShortDescription(){
        return "interrupted by build #${build.getId()}"
      }
    }
    exec.interrupt(Result.ABORTED, cause)
  }
}

//just for test do something long...
Thread.sleep(10000)

在中断的工作中会有一个日志:

Build was aborted
interrupted by build #12
Finished: ABORTED 

答案 1 :(得分:2)

您可以使用通过Groovy Script Plugin运行的系统Groovy Script来执行此操作。这样的脚本可以通过programming API直接访问Jenkins。我没有看到任何其他方式。

答案 2 :(得分:1)

我认为只有在构建之前添加一个groovy脚本才能完美地解决这个问题。如果新作业在旧版本已经构建时进入(它无法检查队列,因为它的预构建部分已经通过),新作业仍然需要等待。

正如我所看到的,为了实现詹金斯先发制人的工作,我们需要创造另一项监督工作。此作业应检查是否定期在队列中有新构建,并在必要时终止较旧构建。

但创建一个监督工作似乎很复杂。我也期待一个完美的解决方案。