Jak*_*ham 5 rest groovy json jenkins jenkins-cli
我的任务是对Jenkins的一些工作进行一些健康检查.我们的想法是通过Jenkins rest API获取作业的状态和相关的IP地址,这样我就可以使用该信息与另一个安静的API进行交互.我创建了一个groovy脚本,成功解析Jenkins作业并获取其状态(无论它们是否正在运行),但我还没有找到将这些作业与其IP地址相关联的方法.有没有办法通过其余的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."
}
}
Run Code Online (Sandbox Code Playgroud)
在标有//的评论部分,我们可以获得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
Run Code Online (Sandbox Code Playgroud)
Node:要获取特定从站的 IP 地址,您必须知道它的名称。这样很容易分级节点名称查询jenkins_url/computer/api/json
我将尝试抓取节点页面的 HTML,以从 swarm 从属描述中获取 IP
这并不总是有效,因为从站可能通过 JNLP 连接,并且您在该 HTML 页面上不会有 IP。