如何识别特定詹金斯大师的绞刑奴隶



我有一个Jenkins master和许多slave静态(!)连接到它。也就是说,每个节点都没有执行器。我正试图通过监控奴隶处理某项工作的时间来识别挂起的奴隶,以便重新启动奴隶。我在这里仔细阅读了Groovy为Jenkins编写的文档:http://javadoc.jenkins-ci.org/但是找不到任何方法来识别繁忙的从机。我发现,只有在使用execor的情况下,才能做到这一点(与此类似:https://wiki.jenkins-ci.org/display/JENKINS/Find+构建+当前+正在运行+已经+执行+超过+N+秒)。

知道我该怎么做吗?

编辑:这是我使用系统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 "nnn"
                    def channel = computer.getChannel()
                    println RemotingDiagnostics.executeGroovy(""""cmd /c shutdown -r".execute().text""",channel)
                    break
                }
        }
    }
}
println "Done"
return 0

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

最新更新