2016-04-12 121 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