jenkisn提供了api獲取node節(jié)點(diǎn)狀態(tài)
http://localhost/computer/slave_name/api/json?pretty=true
只需要將slave_name換成指定的slave名稱即可,返回?cái)?shù)據(jù)是json格式的
{
"actions" : [
{
},
{
}
],
"displayName" : "Niubility_MacPro",
"executors" : [
{
},
{
},
{
}
],
"icon" : "computer-x.png",
"iconClassName" : "icon-computer-x",
"idle" : true,
"jnlpAgent" : true,
"launchSupported" : false,
"loadStatistics" : {
},
"manualLaunchAllowed" : true,
"monitorData" : {
"hudson.node_monitors.SwapSpaceMonitor" : null,
"hudson.node_monitors.ArchitectureMonitor" : null,
"hudson.node_monitors.ResponseTimeMonitor" : {
"timestamp" : 1473177958848,
"average" : 3112
},
"hudson.node_monitors.TemporarySpaceMonitor" : null,
"hudson.plugins.network_monitor.NameResolutionMonitor" : null,
"hudson.plugins.systemloadaverage_monitor.SystemLoadAverageMonitor" : null,
"hudson.node_monitors.DiskSpaceMonitor" : null,
"hudson.node_monitors.ClockMonitor" : null
},
"numExecutors" : 3,
"offline" : true,
"offlineCause" : {
},
"offlineCauseReason" : "Connection was broken: java.io.EOFException\n\tat org.jenkinsci.remoting.nio.NioChannelHub$3.run(NioChannelHub.java:614)\n\tat java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:262)\n\tat hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)\n\tat jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)\n\tat java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:262)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)\n\tat java.lang.Thread.run(Thread.java:745)\n",
"oneOffExecutors" : [
],
"temporarilyOffline" : false
}
如果key offline的value為true說該slave掉線了瓷叫,offlineCauseReason表面原因⊙楹唬可以寫個(gè)簡(jiǎn)單地python腳本操刀,把腳本放到j(luò)enkins上定時(shí)執(zhí)行進(jìn)行監(jiān)控,最好是限定這個(gè)任務(wù)在master上執(zhí)行吩翻,保證任務(wù)順利執(zhí)行兜看。shell里可以判斷返回不為空時(shí)設(shè)置為exit 1,使任務(wù)失敗狭瞎,對(duì)于任務(wù)失敗配置郵件(構(gòu)建后任務(wù)里)提醒即可细移。
import urllib2
import json
baseapi = http://localhost/computer/%s/api/json?pretty=true
def request(slaves):
slaveapis = slaves.split(",")
offlineapi = ""
for api in slaveapis:
url = baseapi % api
ret = json.load(urllib2.urlopen(url))
if ret['offline']:
offlineapi += url
offlineapi += ","
return offlineapi