オンジョブ(A)が複数回トリガーされた場合に、前のジョブがキューから削除され、十分な空きスロットがある場合は最新のジョブのみがキューに残されるか、開始されるように指定することはできますか?
前もって感謝します!
オンジョブ(A)が複数回トリガーされた場合に、前のジョブがキューから削除され、十分な空きスロットがある場合は最新のジョブのみがキューに残されるか、開始されるように指定することはできますか?
前もって感謝します!
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
これは、 GroovyScriptPluginを介して実行されるシステムGroovyScriptで実行できます。このようなスクリプトは、プログラミングAPIを介してJenkinsに直接アクセスできます。私は他の方法を見ていません。
ビルドする前にGroovyスクリプトを追加するだけでは、この問題を完全に解決できるとは思いません。古いジョブがすでにビルドされている間に新しいジョブが入った場合(ビルド前の部分が経過したため、キューをチェックできません)、新しいジョブは引き続き待機する必要があります。
私が見るように、ジェンキンスの先制的な仕事を達成するために、私たちは別の監督の仕事を作成する必要があります。このジョブは、キューに新しいビルドがあるかどうかを定期的にチェックし、必要に応じて古いビルドを終了する必要があります。
しかし、監督の仕事を作成することは複雑に思えます。私も完璧な解決策を期待しています。