Получение IP-адреса через Jenkins REST API?


Мне поручили провести некоторые проверки здоровья на некоторых работах Дженкинса. Идея заключается в том, чтобы получить статус задания и связанный с ним IP-адрес через API Jenkins rest, чтобы я мог использовать эту информацию для взаимодействия с другим API restful. Я создал отличный скрипт, который успешно анализирует задания Дженкинса и получает их статус (независимо от того, запущены они или нет), но мне еще предстоит найти способ связать эти задания с их IP-адресами. Есть ли способ получить IP-адрес адрес ведомого устройства в Jenkins через REST API, а если нет, то есть ли другой способ получить указанный 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."
        }
}

В разделе комментариев с надписью / / Можно ли получить список IP-адресов? Я хотел бы каким-то образом использовать Rest API Дженкинса, чтобы получить список IP-адресов рабов Дженкинса.

Могу ли я сделать это через REST API? А если нет, то есть ли другой способ? Может быть, через кли? Я не видел метода getIP() в любом месте документации Jenkins API, но я довольно новичок в этом, так что я мог бы просто пропустить что-то простое.

1 5

1 ответ:

Вы можете выполнить groovy script на вашем ведомом устройстве через REST API, таким образом, вы можете получить 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 страницы узла, чтобы захватить IP-адрес из описания подчиненного Роя

Это не всегда будет работать как раб может быть подключен через JNLP, и у вас не будет IP-адреса на этой HTML-странице.