Jenkins强制停止单次构建

在使用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 '队列已清空,请重新触发构建'

项目名称和任务编号如下图所示: