Получение 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 ответ:
Вы можете выполнить 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-странице.