我们将Hudson用于我们的连续构建环境。出于某种原因,SCM轮询的线程在一段时间后暂停了一些时间。我已经经历了很多设置,但似乎没有什么真正有效。如何解决这个问题,是否有一些脚本可以检测到这种情况能够重启哈德森?顺便说一句。重启哈德森是目前为我们解决这个问题的唯一方法。
答案 0 :(得分:4)
这类似于bug 5413,应该从2010年末开始使用HUDSON 5977(Hudson 1.380+,或现在Jenkins)来解决。
你在那些帖子中some way to kill any thread stuck on the polling step:
非常原始(我懒得开发更好的东西,因为这不是一个非常重要的问题)Groovy脚本是吼叫的。
可能会发生这种情况,它也会杀死没有卡住的SCM轮询,但我们每天只会自动运行一次这样的脚本,因此不会对我们造成任何麻烦。
你可以改进它,例如通过保存SCM轮询线程的ID和名称,在一段时间后再次检查并仅杀死上一次检查列表中的ID。
Thread.getAllStackTraces().keySet().each(){ item ->
if( item.getName().contains("SCM polling") &&
item.getName().contains("waiting for hudson.remoting")){
println "Interrupting thread " + item.getId() item.interrupt()
}
}
答案 1 :(得分:0)
另一个答案对我不起作用,但是以下脚本found the the issue for this problem做了:
Jenkins.instance.getTrigger("SCMTrigger").getRunners().each()
{
item ->
println(item.getTarget().name)
println(item.getDuration())
println(item.getStartTime())
long millis = Calendar.instance.time.time - item.getStartTime()
if(millis > (1000 * 60 * 3)) // 1000 millis in a second * 60 seconds in a minute * 3 minutes
{
Thread.getAllStackTraces().keySet().each()
{
tItem ->
if (tItem.getName().contains("SCM polling") && tItem.getName().contains(item.getTarget().name))
{
println "Interrupting thread " + tItem.getName();
tItem.interrupt()
}
}
}
}