我们的Jenkins服务器有一个已经运行了三天的作业,但是没有做任何事情。单击角落里的小X没有任何作用,控制台输出日志也没有显示任何内容。我在我们的构建服务器上检查过,该作业实际上似乎根本没有在运行。
有没有办法告诉jenkins工作已经“完成”了,比如编辑一些文件或锁之类的?因为我们有很多任务,所以我们并不想重新启动服务器。
我们的Jenkins服务器有一个已经运行了三天的作业,但是没有做任何事情。单击角落里的小X没有任何作用,控制台输出日志也没有显示任何内容。我在我们的构建服务器上检查过,该作业实际上似乎根本没有在运行。
有没有办法告诉jenkins工作已经“完成”了,比如编辑一些文件或锁之类的?因为我们有很多任务,所以我们并不想重新启动服务器。
当前回答
进入"Manage Jenkins" > "Script Console"在服务器上运行一个脚本以中断挂起的线程。
您可以使用Thread.getAllStackTraces()获取所有活动线程,并中断正在挂起的线程。
Thread.getAllStackTraces().keySet().each() {
t -> if (t.getName()=="YOUR THREAD NAME" ) { t.interrupt(); }
}
更新:
上述使用线程的解决方案可能不适用于最新的Jenkins版本。要中断冻结的管道,请参考这个解决方案(由alexandru-bantiuc),并运行:
Jenkins.instance.getItemByFullName("JobName")
.getBuildByNumber(JobNumber)
.finish(
hudson.model.Result.ABORTED,
new java.io.IOException("Aborting build")
);
其他回答
我编写的一个名为jkillthread的实用程序可以用来停止任何Java进程中的任何线程,只要您能够以相同的帐户登录到运行该服务的机器。
第一个提议的解决方案非常接近。如果使用stop()而不是interrupt(),它甚至会杀死在groovy系统脚本中无休止地运行的失控线程。这将杀死任何构建,任何工作。 代码如下:
Thread.getAllStackTraces().keySet().each() {
if (it.name.contains('YOUR JOBNAME')) {
println "Stopping $it.name"
it.stop()
}
}
你可以复制作业,然后删除旧的。如果你丢失了旧的构建日志没有关系的话。
非常简单的解决方案
我看到这个问题的原因是页面上不正确的http链接,而不是应该停止工作的https。所有你需要做的是编辑onclick属性在html页面,通过以下
Open up a console log of the job (pipeline) that got hang Click whatever is available to kill the job (x icon, "Click here to forcibly terminate running steps" etc) to get "Click here to forcibly kill entire build" link visible (it's NOT gonna be clickable at the moment) Open the browser's console (use any one of three for chrome: F12; ctrl + shift + i; menu->more tools->developer tools) Locate "Click here to forcibly kill entire build" link manually or using "select an element in the page" button of the console Double click on onclick attribute to edit its value Append s to http to have https Press enter to submit the changes Click "Click here to forcibly kill entire build" link
使用截图作为参考
我也有同样的问题,并修复它通过詹金斯控制台。
进入“Manage Jenkins”>“Script Console”,运行一个脚本:
Jenkins .instance.getItemByFullName("JobName")
.getBuildByNumber(JobNumber)
.finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));
您只需指定JobName和JobNumber。