2016-04-12 12 views
0

Bir Jenkins master'ım ve ona bağlı statik (!) Bir köle var. Yani, her düğümün yöneticileri yoktur. Kölenin köleyi yeniden başlatması için kölenin belirli bir işi ne kadar sürede ele aldığını izleyerek asılı köleleri tespit etmeye çalışıyorum. Burada Jenkins'in Groovy'un belgelerini dikkatlice okudum: http://javadoc.jenkins-ci.org/ Meşgul bir köleyi tanımlamanın herhangi bir yolunu bulamadım. Yapılabildiğini bulduğum tek yol, yalnızca exectors kullanılıyorsa (buna benzer şekilde: https://wiki.jenkins-ci.org/display/JENKINS/Find+builds+currently+running+that+has+been+executing+for+more+than+N+seconds) geçerlidir.Belirli bir jenkins master için asılı slave nasıl tanımlanır

Herhangi bir fikir nasıl yapabilirim?

düzenlendi: Bu sistem Groovy script kullanarak benim çözüm: Kendim test edilmiş, ancak Computer sınıftan Computer.countBusy() veya Computer.isIdle() uygulamak için denemek değil

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

Sorunuzun başlığı "verilen jenkins master için nasıl takıldığını belirleme" olabilir. – Jayan

+0

Düzenlendi ... herhangi bir fikir? – MROB

cevap

0

.

+0

Çalışabilir ve daha önce bu yöntemleri daha önce okudum, ancak Computer sınıfının belgelerine göre ve bahsettiğiniz yöntemler belirli bir bağımlı bilgisayarın yürütücüleriyle ilgilidir. Bununla birlikte, benim durumumda, tek yönetici anadır ve tüm bağımlıların statik bağlantısı nedeniyle yürütücüleri yoktur. Bu sorunu nasıl aşabilirim? – MROB

+0

@MROB Statik bağlantı ne anlama geliyor? – luka5z