2015-07-28 5 views
4

Мне поручили установить некоторую проверку здоровья на некоторых работах Дженкинса. Идея состоит в том, чтобы получить статус задания и связанный с ним IP-адрес через API отдыха Jenkins, поэтому я могу использовать эту информацию для взаимодействия с другим непринужденным API. Я создал отличный скрипт, который успешно разбирает задания Jenkins и получает их статус (независимо от того, работает он или нет), но мне еще предстоит найти способ связать эти задания с их IP-адресами. Есть ли способ получить IP-адрес подчиненного в Jenkins через API-интерфейс остального, а если нет, есть ли другой способ получить указанный IP-адрес?Получение IP-адреса через API REST Jenkins?

Вот код, который я получил до сих пор, что работает как шарм:

@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 для получения списка IP-адресов подчиненных Jenkins.

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

+0

В качестве краткосрочного решения я попытаюсь очистить HTML-страницу узла, чтобы захватить IP-адрес из описания swarm-slave, но я бы очень предпочел сделать это в более канонической или спокойной форме, если там это один. –

+0

Возможный дубликат: http://stackoverflow.com/q/28092236/172599 –

+0

Привет, Дейв, я не думаю, что это дубликат, так как это отдельный оригинальный скрипт. Он не работает от мастера Дженкинса, я просто запускаю его на своей локальной машине. –

ответ

2

Вы можете выполнить скрипт groovy на своем подчиненном устройстве через REST API, таким образом, вы можете получить IP-адрес ведомого. Вот пример с завитком, но вы можете изменить его, чтобы использовать в своем коде:

$ curl -u username:password -d "script=println InetAddress.localHost.hostAddress" jenkins_url/computer/node_name/scriptText 
# 192.168.0.104 

Узел: чтобы получить IP-адрес конкретного ведомого устройства, вы должны знать это имя. Это легко град узлов имен запрашивая jenkins_url/computer/api/json

я собираюсь попробовать выскабливание HTML страницы узла, чтобы захватить IP из описания роя ведомой

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