一尘不染

如何在Jenkins上停止无法阻止的僵尸作业而无需重新启动服务器?

jenkins

我们的Jenkins服务器有一项已经运行了三天的工作,但是什么也没做。单击角落的小X不会执行任何操作,并且控制台输出日志也不会显示任何内容。我已经检查了我们的构建服务器,该工作实际上似乎根本没有运行。

有没有办法通过编辑某些文件或锁或其他内容来告诉jenkins该工作已“完成”?由于我们有很多工作,因此我们实际上并不想重启服务器。


阅读 582

收藏
2020-07-25

共1个答案

一尘不染

转到“管理Jenkins”>“脚本控制台”以在服务器上运行脚本以中断挂起的线程。

您可以获取所有活动线程,Thread.getAllStackTraces()并中断正在挂起的线程。

Thread.getAllStackTraces().keySet().each() {
  t -> if (t.getName()=="YOUR THREAD NAME" ) {   t.interrupt();  }
}

更新:

上述使用线程的解决方案可能无法在最新的Jenkins版本上使用。并运行:

Jenkins.instance.getItemByFullName("JobName")
                .getBuildByNumber(JobNumber)
                .finish(
                        hudson.model.Result.ABORTED,
                        new java.io.IOException("Aborting build")
                );
2020-07-25