2013-02-12 14 views
20

Posso trovare tutto sul mio server Jenkins tramite l'API remota, ma non l'elenco dei lavori attualmente in esecuzione.Da Jenkins, come ottengo un elenco dei lavori attualmente in esecuzione in JSON?

Questo,

http://my-jenkins/computer/api/json 

o

http://my-jenkins/computer/(master)/api/json 

sembrerebbe come le scelte più logiche, ma non dicono niente (a parte il conteggio dei posti di lavoro) su cui i lavori sono effettivamente in esecuzione.

+0

Eventuali duplicati di http://serverfault.com/questions/309848/how-can-i-check-the-build-status-of-a-jenkins-build-from-the-command -line – Anew

+2

Questa domanda riguarda il controllo di un singolo risultato di costruzione, sto cercando di ispezionare quali lavori sono attualmente in esecuzione. Cose diverse in questo caso –

+0

Ah, mio ​​male. Penso di essere incappato in una soluzione. – Anew

risposta

19

ho una visione definita utilizzando View Job Filters Plugin che filtra appena attualmente in esecuzione di posti di lavoro, quindi è possibile utilizzare /api/json sulla pagina di visualizzazione per vedere solo i posti di lavoro che sono in esecuzione. Ho anche una per abortito, instabile, ecc

UPDATE

Seleziona Modifica vistaFiltri lavoroAggiungi filtro lavoro   ▼Corporatura Statuses Filter
  Corporatura stati:   ☑ attualmente costruendo
  Tipo di corrispondenza:   Escludi senza pari - ...

+0

Sai se c'è un modo per recuperare i # di build dei lavori in esecuzione? Ho creato una vista come hai descritto, il json conteneva i nomi dei lavori ma nessun numero di build. – pcjr

10

po 'di hack, ma credo che si può dedurre lavori in corso di esecuzione, cercando in chiave di colore nel lavoro oggetti quando si fa un GET a /jenkins/api/json?pretty=true. Se l'icona della "palla" per un dato lavoro in Jenkins è animata, sappiamo che è in esecuzione.

Date un'occhiata alla matrice di oggetti di lavoro nella risposta JSON:

{ 
... 
    "jobs" : [ 
    { 
     "name" : "Test Job 1", 
     "url" : "http://localhost:8000/jenkins/job/Test%20Job%201/", 
     "color" : "blue" 
    }, 
    { 
     "name" : "Test Job 2", 
     "url" : "http://localhost:8000/jenkins/job/Test%20Job%202/", 
     "color" : "blue_anime" 
    } 
    ... 
} 

In questo caso "color" : "blue_anime" indica che il lavoro è attualmente in esecuzione, e "color" : "blue" indica che il lavoro non è in esecuzione.

Spero che questo aiuti.

+2

Grazie, anche se le palle non dicono sempre la storia corretta. In particolare se un lavoro è disabilitato mentre è in esecuzione (che è il mio caso naturale) - la palla è colorata "disabilitata" anche se il lavoro è attualmente in esecuzione. –

5

Maresciallo l'uscita e filtro per "costruire: true" dalla seguente chiamata a jSON api su un lavoro con l'albero per filtrare la roba estranea (speriamo che questo aiuta):

http://jenkins.<myCompany>.com/job/<myJob>/api/json?pretty=true&depth=2&tree=builds[builtOn,changeSet,duration,timestamp,id,building,actions[causes[userId]]] 

vi darà som ething come:

{ 
    "builds" : [ 
{ 
    "actions" : [ 
    { 

    }, 
    { 
     "causes" : [ 
     { 
      "userId" : "cheeseinvert" 
     } 
     ] 
    }, 
    { 

    }, 
    { 

    }, 
    { 

    }, 
    { 

    } 
    ], 
    "building" : true, 
    "duration" : 0, 
    "id" : "2013-05-07_13-20-49", 
    "timestamp" : 1367958049745, 
    "builtOn" : "serverA", 
    "changeSet" : { 

    } 
}, ... 
+0

Esiste un modo per visualizzare risultati che hanno solo 'building: true' e che ignorano' building: false'? – Gi0rgi0s

39

C'è spesso confusione tra lavori e build a Jenkins, soprattutto perché i lavori sono spesso indicati come 'costruire posti di lavoro'.

  • Jobs (o 'costruire posti di lavoro' o 'progetti') contengono configurazione che descrive ciò che per eseguire e come eseguirlo.
  • Le build sono esecuzioni di un lavoro. Una build contiene informazioni sull'ora di inizio e di fine, lo stato, la registrazione, ecc.

Vedere https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project per ulteriori informazioni.

Se si desidera che i lavori che sono attualmente in costruzione (ad esempio avere uno o più giri costruisce), il modo più veloce è quello di utilizzare l'API REST con XPath per filtrare sui colori che terminano con _anime, in questo modo:

http://jenkins.example.com/api/xml?tree=jobs[name,url,color]&xpath=/hudson/job[ends-with(color/text(),%22_anime%22)]&wrapper=jobs 

vi darà qualcosa di simile:

<jobs> 
    <job> 
    <name>PRE_DB</name> 
    <url>http://jenkins.example.com/job/my_first_job/</url> 
    <color>blue_anime</color> 
    </job> 
    <job> 
    <name>SDD_Seller_Dashboard</name> 
    <url>http://jenkins.example.com/job/my_second_job/</url> 
    <color>blue_anime</color> 
    </job> 
</jobs> 

Jenkins utilizza il campo color per indicare la stat noi del lavoro, in cui il suffisso _anime indica che il lavoro è attualmente in costruzione.

Sfortunatamente, questo non ti darà alcuna informazione sulla versione corrente build. Più istanze del lavoro possono essere eseguite contemporaneamente e la build in esecuzione non è sempre l'ultima avviata.

Se si desidera elencare tutte le esecuzione costruisce, è anche possibile utilizzare l'API REST per ottenere una risposta veloce, come questo:

http://jenkins.example.com/computer/api/xml?tree=computer[executors[currentExecutable[url]],oneOffExecutors[currentExecutable[url]]]&xpath=//url&wrapper=builds 

vi darà qualcosa di simile:

<builds> 
    <url>http://jenkins.example.com/job/my_first_job/1412/</url> 
    <url>http://jenkins.example.com/job/my_first_job/1414/</url> 
    <url>http://jenkins.example.com/job/my_second_job/13126/</url> 
</builds> 

Qui viene visualizzato un elenco di tutte le build attualmente in esecuzione. Sarà necessario analizzare l'URL per separare il nome del lavoro dal numero di build. Nota come my_first_job ha due build attualmente in esecuzione.

+0

Questo non sembra più funzionare, nel mio caso restituisce tutti i lavori, non i build. – sorin

+0

Se hai bisogno di tutte le build attualmente in esecuzione (e il loro numero di build) sembra funzionare sulla versione corrente di Jenkins (2.103): http://jenkins.example.com/computer/api/xml?depth=2&tree= computer [executors [currentExecutable [building, url]], oneOffExecutors [currentExecutable [building, url]] & xpath = // currentExecutable [building =% 27true% 27]/url & wrapper = builds – paulyb

8

Si può fare questo con l'API Jenkins albero, utilizzando un endpoint come questo:

http://<host>/api/json?tree=jobs[name,lastBuild[building,timestamp]] 

Si può vedere quali attributi da lastBuild è possibile utilizzare se si accede <job-endpoint>/lastBuild/api/json.

+0

Se le cartelle vengono utilizzate, sembrano essere " lavori annidati in lavori "quindi è necessario un albero più complicato, ad es '' '/ api/json? Tree = jobs [nome, url, colore, lastBuild [costruzione, timestamp], lavori [nome, url, colore, lastBuild [costruzione, timestamp], lavori [nome, url, colore, LastBuild [edificio, timestamp], posti di lavoro [nome, URL, il colore, LastBuild [edificio, timestamp]]]]] & abbastanza = true''' –

2

Ho avuto un problema simile a quello in cui alcuni build di pipeline si bloccano nello stato di costruzione dopo il riavvio di jenkins (i lavori piepline dovrebbero essere durevoli e riprendere ma il più delle volte rimangono bloccati indefinitamente).

Queste build non usano un executor quindi l'unico modo per trovarle è di aprire ogni lavoro.

Tutte le altre risposte sembrano funzionare quando il progetto è considerato edificio, vale a dire l'ultima build è in costruzione. Ma ignorano le costruzioni passate che stanno ancora costruendo.

La seguente query funziona per me e mi fornisce tutte le build attualmente in esecuzione, vale a dire che non hanno un risultato.

http://localhost:8080/api/xml?tree=jobs[name,builds[fullDisplayName,id,number,timestamp,duration,result]]&xpath=/hudson/job/build[count(result)=0]&wrapper=builds

Problemi correlati