tarea - programador jenkins
Detener el trabajo de Jenkins en caso de que se inicie uno más nuevo (3)
Puede hacerlo con un sistema Groovy Script ejecutado a través de Groovy Script Plugin . Tal script tiene acceso directo a Jenkins a través de su API de programación . No veo otra forma.
¿Es posible especificar que, en caso de que el trabajo (A) se active más de una vez, los trabajos anteriores se eliminen de la cola, y solo quede el último en cola o se inicie si hay suficientes espacios libres?
¡Gracias por adelantado!
No creo que este problema pueda resolverse perfectamente si solo se agrega una secuencia de comandos groovy antes de compilar. Si el nuevo trabajo entra mientras el anterior ya ha estado compilando (no puede verificar la cola, ya que su parte previa a la construcción ha pasado), el nuevo todavía tiene que esperar.
Como veo, para lograr un trabajo preventivo de jenkins, necesitamos crear otro trabajo de supervisión. Este trabajo debería verificar si hay compilaciones nuevas en la cola regularmente y terminar la anterior si es necesario.
Pero crear un trabajo supervisado parece complejo. También espero una solución perfecta.
Utilice el paso de 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)
y en el trabajo interrumpido habrá un registro:
Build was aborted
interrupted by build #12
Finished: ABORTED