2016-04-12 89 views
0

我有一个詹金斯大师和一些静态的奴隶(!)连接到它。也就是说,每个节点都没有执行者。我试图通过监视从服务器处理某个工作以重新启动从服务器的时间来确定挂起的从服务器。我仔细阅读了Groovy在Jenkins的文档: http://javadoc.jenkins-ci.org/ 但是找不到任何方法来识别繁忙的从站。我发现可以完成的唯一方法只有在使用了执行者的情况下才有意义(以类似的方式:https://wiki.jenkins-ci.org/display/JENKINS/Find+builds+currently+running+that+has+been+executing+for+more+than+N+seconds)。如何识别给定詹金斯大师的挂起奴隶

任何想法我该怎么做?

编辑: 这是使用系统Groovy脚本我的解决方案:

import hudson.model.* 
import hudson.node_monitors.* 
import hudson.slaves.* 
import java.util.concurrent.* 
import jenkins.model.Jenkins 
import hudson.util.RemotingDiagnostics  
jenkins = Hudson.instance  
import javax.mail.internet.*; 
import javax.mail.* 
import javax.activation.*  
import hudson.*; 
import hudson.tasks.*; 
import hudson.model.AbstractBuild 
import hudson.Launcher 
import hudson.model.BuildListener 
import hudson.FilePath 
import groovy.io.FileType 
import jenkins.util.VirtualFile; 



int MAX_ALLOWED_DURATION_IN_SECONDS = 60 * 30 // 30 minutes 


for (computer in jenkins.model.Jenkins.instance.computers) 
{ 
    for(e in computer.executors) 
    { 
     if(e.isBusy()) 
     { 
      int durationInSeconds = (System.currentTimeMillis() - e.executable.getStartTimeInMillis())/1000.0 
      if(durationInSeconds > MAX_ALLOWED_DURATION_IN_SECONDS) 
       { 
        print "restarting slave:" 
        println computer.getName() 
        println "\n\n\n" 

        def channel = computer.getChannel() 
        println RemotingDiagnostics.executeGroovy(""""cmd /c shutdown -r".execute().text""",channel) 
        break 
       } 
     } 
    } 
} 
println "Done" 

return 0 
+0

你的问题的标题可能是“如何识别给予詹金斯大师挂奴隶”.. – Jayan

+0

编辑...任何想法? – MROB

回答

0

我没有测试它自己,但尝试从Computer类应用Computer.countBusy()Computer.isIdle()

+0

它可能会工作,而且我已经阅读过有关这些方法的更多信息,但根据文档,计算机类和您提到的方法与某个从属计算机的执行者有关。然而,在我的情况下,唯一的执行者是主人,所有的奴隶由于静态连接而没有执行者。我怎样才能克服这个问题? – MROB

+0

@MROB静态连接是什么意思? – luka5z