我们的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")
);
其他回答
有一次我遇到了一个无法通过“脚本控制台”停止的构建。最后我通过以下步骤解决了这个问题:
ssh onto the jenkins server
cd to .jenkins/jobs/<job-name>/builds/
rm -rf <build-number>
restart jenkins
有同样的问题,但没有堆栈线程。我们使用Jenkins控制台中的这个片段删除了作业。将jobname和build dnumber替换为您的。
def jobname = "Main/FolderName/BuildDefinition"
def buildnum = 6
Jenkins.instance.getItemByFullName(jobname).getBuildByNumber(buildnum).delete();
我想现在回答已经太迟了,但我帮助了一些人。
安装监控插件。(http://wiki.jenkins-ci.org/display/JENKINS/Monitoring) 进入jenkinsUrl/monitoring/nodes 转到底部的Threads部分 点击主界面左侧的详细信息按钮 按用户时间排序(ms) 然后查看线程的名称,您将获得构建的名称和编号 杀了它
对不起,我没有足够的声誉来发布图片。
希望能有所帮助
同样的问题已经发生在我身上两次了,唯一的解决方案是重新启动tomcat服务器并重新启动构建。
最近我遇到了一个节点/代理,它的一个执行程序被管道作业的构建“X”占用了几天,尽管该作业页面声称构建“X”不再存在(在后续10个构建后被丢弃(!),正如管道作业中配置的那样)。在磁盘上验证:构建“X”真的消失了。
解决方案:代理/节点错误地报告了被占用的执行程序正在忙着运行构建“X”。中断该执行程序的线程会立即释放它。
def executor = Jenkins.instance.getNode('NODENAME').computer.executors.find {
it.isBusy() && it.name.contains('JOBNAME')
}
println executor?.name
if (executor?.isBusy()) executor.interrupt()
考虑的其他答案:
来自@cheffe的答案:没有工作(见下一点,并在下面更新)。 thread. getallstacktraces()的答案:没有匹配的线程。 来自@levente-holló的答案和getBuildByNumber()的所有答案:不适用,因为构建已经不存在了! 来自@austinfromboston的答案:这接近于我的需求,但它也会破坏目前正在运行的任何其他构建。
更新: 我再次经历了类似的情况,Executor被一个(仍然存在的)已完成的管道构建占用了数天。这个代码片段是唯一可行的解决方案。