在使用Jenkins构建时,有时候点击停止构建,但是页面还是在继续转圈,没有完全停止,类似下图的场景,已经点击了取消,但是还在运行。

针对这种情况,可以通过运行脚本的方式,强制停止构建任务。

点击设置,找到脚本命令行,把下面脚本放进去执行,注意要修改前面两个参数。
def jobName = '项目名称'
def stuckNum = 任务编号
def job = Jenkins.instance.getItemByFullName(jobName)
if (job == null) {
println "找不到 Job: ${jobName}"
return
}
def build = job.getBuildByNumber(stuckNum)
if (build == null) {
println "找不到构建 #${stuckNum}"
return
}
println "构建 #{stuckNum} isBuilding={build.isBuilding()} result=${build.result}"
// 1) 尝试正常 stop
build.doStop()
// 2) 中断 executor
build.getExecutor()?.interrupt(Result.ABORTED)
// 3) 若仍显示 running,强制 finish
Thread.sleep(2000)
if (build.isBuilding()) {
build.finish(Result.ABORTED, new java.io.IOException('手动强制结束僵尸构建'))
println '已 force finish 为 ABORTED'
}
// 4) 释放队列里被挡住的 #3
Jenkins.instance.queue.clear()
println '队列已清空,请重新触发构建'
项目名称和任务编号如下图所示:

