Jenkins 如何为给定的詹金斯主人识别悬挂奴隶
我有一个詹金斯大师和一些静态(!)连接到它的奴隶。也就是说,每个节点都没有执行器。我正试图通过监视从机在Orer中处理某项作业以重新启动从机的时间来识别挂起的从机。我在这里仔细阅读了Groovy为Jenkins编写的文档: 但是找不到任何方法来识别一个忙碌的奴隶。我发现,只有在使用了exector的情况下,才能实现这一点(与此类似:) 知道我该怎么做吗 编辑: 这是我使用system Groovy脚本的解决方案:Jenkins 如何为给定的詹金斯主人识别悬挂奴隶,jenkins,groovy,Jenkins,Groovy,我有一个詹金斯大师和一些静态(!)连接到它的奴隶。也就是说,每个节点都没有执行器。我正试图通过监视从机在Orer中处理某项作业以重新启动从机的时间来识别挂起的从机。我在这里仔细阅读了Groovy为Jenkins编写的文档: 但是找不到任何方法来识别一个忙碌的奴隶。我发现,只有在使用了exector的情况下,才能实现这一点(与此类似:) 知道我该怎么做吗 编辑: 这是我使用system Groovy脚本的解决方案: import hudson.model.* import hudson.node_
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
我自己没有测试过,但试着在课堂上应用
Computer.countBusy()
或Computer.isIdle()
。你的问题的标题可能是“如何为给定的jenkins master识别挂起的奴隶”。这可能有效,我之前已经读过这些方法,但是根据文档,计算机类和您提到的方法与某个从计算机的执行器相关。但是,在我的例子中,唯一的执行器是主执行器,由于静态连接,所有从执行器都没有执行器。如何克服这个问题?@MROB静态连接是什么意思?