我们的Jenkins服务器有一个已经运行了三天的作业,但是没有做任何事情。单击角落里的小X没有任何作用,控制台输出日志也没有显示任何内容。我在我们的构建服务器上检查过,该作业实际上似乎根本没有在运行。
有没有办法告诉jenkins工作已经“完成”了,比如编辑一些文件或锁之类的?因为我们有很多任务,所以我们并不想重新启动服务器。
我们的Jenkins服务器有一个已经运行了三天的作业,但是没有做任何事情。单击角落里的小X没有任何作用,控制台输出日志也没有显示任何内容。我在我们的构建服务器上检查过,该作业实际上似乎根本没有在运行。
有没有办法告诉jenkins工作已经“完成”了,比如编辑一些文件或锁之类的?因为我们有很多任务,所以我们并不想重新启动服务器。
当前回答
你可以复制作业,然后删除旧的。如果你丢失了旧的构建日志没有关系的话。
其他回答
半小时前我也有同样的问题…
无法删除在我的多分支管道中运行的僵尸构建。 甚至服务器重启UI,甚至从命令行通过sudo服务jenkins重启 阻止了行刑…建造是无法停止的……它总是重新出现。
使用版本:Jenkins 2.150.2
我很生气,但是……在查看构建日志时,我在日志的末尾发现了一些有趣的东西:
红色标记的部分是“令人沮丧的部分”…… 正如你所看到的,我一直想要从UI中止构建,但它不起作用…
但是有一个文本超链接点击这里强制终止运行步骤…(第一个绿色的) 现在我按下了链接…) 在链接执行后,出现了关于仍然暂停的消息和另一个链接单击 这里强制杀死整个建筑(第二个绿色的) 在按下这个链接之后,这个构建也最终被硬杀了…
因此,这似乎不需要任何特殊的插件(除了多分支管道构建插件本身)。
如果“X”按钮不起作用,作业被卡住,那么只需删除特定的版本号。这将解放遗嘱执行人。
在我的例子中,即使工作完成了,它仍然停留在执行者几个小时。删除构建对我来说是有效的。
我也有同样的问题,并修复它通过詹金斯控制台。
进入“Manage Jenkins”>“Script Console”,运行一个脚本:
Jenkins .instance.getItemByFullName("JobName")
.getBuildByNumber(JobNumber)
.finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));
您只需指定JobName和JobNumber。
同样的问题已经发生在我身上两次了,唯一的解决方案是重新启动tomcat服务器并重新启动构建。
上面的答案对我来说几乎是可行的,但我有一个主要问题:由于Jenkins重启的时间特别糟糕,我有非常多的僵尸作业(大约100个),所以手动查找每个僵尸作业的作业名称和构建号,然后手动杀死它们是不可可行的。以下是我如何自动找到并杀死僵尸工作的方法:
Jenkins.instance.getItemByFullName(multibranchPipelineProjectName).getItems().each { repository->
repository.getItems().each { branch->
branch.builds.each { build->
if (build.getResult().equals(null)) {
build.doKill()
}
}
}
}
该脚本遍历所有作业的所有构建,并使用getResult().equals(null)来确定作业是否已经完成。在队列中但尚未开始的构建将不会被迭代(因为该构建不会在job.builds中),并且已经完成的构建对于build. getresult()将返回非null的值。合法运行的作业的构建结果也会为null,因此在运行此作业之前,请确保没有不想终止的正在运行的作业。
在Multibranch Pipeline项目中,多个嵌套循环主要用于发现每个存储库的每个分支/PR;如果你没有使用Multibranch pipeline,你可以直接使用Jenkins.instance.getItems().each这样的东西来循环所有的作业。