我的任务是对 Jenkins 的一些工作进行一些健康检查。这个想法是通过 Jenkins Rest API 获取作业的状态和关联的 IP 地址,这样我就可以使用该信息与另一个 Restful API 进行交互。我创建了一个 groovy 脚本,可以成功解析 Jenkins 作业并获取它们的状态(无论它们是否正在运行),但我还没有找到一种方法将这些作业与其 IP 地址关联起来。有没有办法通过rest API获取Jenkins中从站的IP地址,如果没有,是否有其他方法来获取所述IP地址?
这是我到目前为止得到的代码,效果非常好:
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7')
import groovyx.net.http.RESTClient
import groovy.json.JsonSlurper
def jenkinsClient = new RESTClient( 'myJenkinsURL' )
def monitorClient = new RESTClient( 'myOtherRestfulAPIURL' )
monitorClient.auth.basic "<username>", "<pass>"
jenkinsClient.setHeaders(Accept: 'application/json')
monitorClient.setHeaders(Accept: 'application/json')
def jobs = []
def jenkinsGetJobs = jenkinsClient.get( path: 'view/Events/api/json', contentType: 'text/plain' )
def jenkinsGetJobsSlurp = new JsonSlurper().parse(jenkinsGetJobs.data)
for (def j in jenkinsGetJobsSlurp.jobs ){
jobs.add(j.name)
}
//Can we get a list of IPS?
for(def job in jobs){
def jenkinsResp = jenkinsClient.get( path : 'view/Events/job/' + job + '/api/json', contentType: 'text/plain', query: [depth:"1"])
def jenkinsSlurp = new JsonSlurper().parse(jenkinsResp.data)
// println slurp
if (jenkinsSlurp.builds[0].building == true){
println "The " + job + " job is running."
//Make a call to other Restful API here
}
if (jenkinsSlurp.builds[0].building == false){
println "The " + job + " job is not running."
}
}
在标记为 //can we get a list of IPS? 的评论部分中我想以某种方式使用 Jenkins Rest API 来获取 Jenkins 从站的 IP 列表。
我可以通过其余 API 执行此操作吗?如果没有,还有其他方法吗?也许是通过 CLI?我在 Jenkins API 文档中没有看到 getIP() 方法,但我对此还很陌生,所以我可能只是错过了一些简单的东西。
您可以通过 REST API 在您的从站上执行 groovy 脚本,从而获取从站的 IP 地址。这是一个使用 curl 的示例,但您可以调整它以在代码中使用:
$ curl -u username:password -d "script=println InetAddress.localHost.hostAddress" jenkins_url/computer/node_name/scriptText
# 192.168.0.104
Node:要获取特定从站的 IP 地址,您必须知道它的名称。这样很容易分级节点名称查询jenkins_url/computer/api/json
我将尝试抓取节点页面的 HTML,以从 swarm 从属描述中获取 IP
这并不总是有效,因为从站可能通过 JNLP 连接,并且您在该 HTML 页面上不会有 IP。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)