是否可以指定,如果多次触发作业(A),先前的作业将从队列中删除,只有最新的作业留在队列中或者如果有足够的空闲插槽则启动?
提前致谢!
答案 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脚本才能完美地解决这个问题。如果新作业在旧版本已经构建时进入(它无法检查队列,因为它的预构建部分已经通过),新作业仍然需要等待。
正如我所看到的,为了实现詹金斯先发制人的工作,我们需要创造另一项监督工作。此作业应检查是否定期在队列中有新构建,并在必要时终止较旧构建。
但创建一个监督工作似乎很复杂。我也期待一个完美的解决方案。