小编典典

如何在不重新启动服务器的情况下停止 Jenkins 上不可阻挡的僵尸作业?

all

我们的 Jenkins 服务器有一个工作已经运行了三天,但没有做任何事情。点击角落里的小 X
没有任何反应,控制台输出日志也没有显示任何内容。我检查了我们的构建服务器,该工作实际上似乎根本没有运行。

有没有办法告诉詹金斯工作已经“完成”,通过编辑一些文件或锁或其他东西?由于我们有很多工作,我们真的不想重新启动服务器。


阅读 62

收藏
2022-06-08

共1个答案

小编典典

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

您可以获取所有活动线程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")
                );
2022-06-08