通过 Jenkins REST API 获取 IP 地址?

Getting an IP Address through Jenkins REST API?

我的任务是对一些 Jenkins 作业进行健康检查。我的想法是通过 Jenkins rest API 获取作业的状态和关联的 IP 地址,因此我可以使用该信息与另一个 restful 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."
        }
}

在标有//我们能得到IPS列表的评论部分吗?我想以某种方式使用 Jenkins Rest API 来获取 Jenkins 奴隶的 IP 列表。

剩下的API我可以做到吗?如果没有,还有另一种方法吗?也许是通过 CLI?我在 Jenkins API 文档中的任何地方都没有看到 getIP() 方法,但我对此还很陌生,所以我可能只是遗漏了一些简单的东西。

您可以通过 REST API 在您的 slave 上执行 groovy 脚本,从而获得 slave 的 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

I am going to try scraping the HTML of the node page to grab the IP from the swarm slave description

这并不总是有效,因为 slave 可能通过 JNLP 连接,并且您在该 HTML 页面上没有 IP。