2013-02-12 5 views
20

Ich kann fast alles über meinen Jenkins-Server über die Remote-API herausfinden, aber nicht die Liste der aktuell laufenden Jobs. DieseVon Jenkins, wie bekomme ich eine Liste der aktuell laufenden Jobs in JSON?

,

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

oder

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

Würde wie die logischste Wahl erscheinen, aber sie sagen nichts (außer der Anzahl der Arbeitsplätze), um die Aufträge ausgeführt werden tatsächlich.

+0

Mögliche Duplikat http://serverfault.com/questions/309848/how-can-i-check-the-build-status-of-a-jenkins-build-from-the-command -line – Anew

+2

Bei dieser Frage geht es darum, ein einzelnes Build-Ergebnis zu prüfen. Ich möchte prüfen, welche Jobs gerade ausgeführt werden. Verschiedene Dinge in diesem Fall. –

+0

Ahh, mein Schlechter. Ich denke, ich bin über eine Lösung gestolpert. – Anew

Antwort

19

Ich habe eine Sicht definiert mit View Job Filters Plugin, die gerade laufende Jobs filtert, dann können Sie /api/json auf der Ansichtsseite verwenden, um nur die laufenden Jobs anzuzeigen. Ich habe auch eine für abgebrochen, instabil etc.

UPDATE

Select Bearbeiten AnsichtJob FilterJobfilter   ▼Körperbau hinzufügen Status Filter
Build-  Stati:   ☑ Derzeit baut
  Spiel Typ:   ausschließen Unübertroffene - ...

+0

Weißt du, ob es eine Möglichkeit gibt, die Build # 's der laufenden Jobs abzurufen? Ich habe eine Ansicht erstellt, wie Sie beschrieben haben, die JSON enthielt die Jobnamen, aber keine Build-Nummern. – pcjr

10

Bit eines Hacks, aber ich denke, Sie können ableiten, welche Jobs derzeit ausgeführt werden, indem Sie den Farbschlüssel in den Jobobjekten betrachten, wenn Sie eine GET um /jenkins/api/json?pretty=true machen. Wenn das "Ball" -Symbol für einen bestimmten Job in Jenkins animiert ist, wissen wir, dass es läuft.

Werfen Sie einen Blick auf die Reihe von Job-Objekte in der JSON-Antwort:

{ 
... 
    "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 diesem Fall "color" : "blue_anime" zeigt an, dass der Auftrag gerade ausgeführt wird, und "color" : "blue" zeigt an, dass der Auftrag nicht ausgeführt wird.

Hoffe, das hilft.

+2

Danke, obwohl die Bälle nicht immer die richtige Geschichte erzählen. Insbesondere wenn ein Job während des Laufens deaktiviert ist (was natürlich mein Fall ist) - der Ball ist Farbe "deaktiviert", obwohl der Job gerade läuft. –

5

Marshal die Ausgabe und Filter für "Gebäude: true" aus dem folgenden Aufruf json api auf einem Job mit Baum, um die fremden Sachen heraus zu filtern (hoffen, das hilft):

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

geben Sie som ething wie:

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

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

    }, 
    { 

    }, 
    { 

    }, 
    { 

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

    } 
}, ... 
+0

Gibt es eine Möglichkeit, Ergebnisse anzuzeigen, die nur 'building: true' haben und' building: false' ignorieren? – Gi0rgi0s

39

Oft gibt es Verwirrung zwischen Jobs und in Jenkins bauen, zumal Arbeitsplätze oft genannt werden als 'Arbeitsplätze bauen'.

  • Jobs (oder ‚bauen Arbeitsplätze‘ oder ‚Projekte‘) Konfiguration enthalten, dass es etwas zu laufen und wie laufen beschreibt.
  • Builds sind Ausführungen eines Jobs. Ein Build enthält Informationen über die Start- und Endzeit, den Status, die Protokollierung usw.

Weitere Informationen finden Sie unter https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project.

Wenn Sie die Jobs, die zur Zeit im Aufbau (dh eine oder mehrere Lauf baut), der schnellste Weg, um die REST-API mit XPath zu verwenden, ist auf Farben zu filtern, die mit _anime enden, wie folgt aus:

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

geben Ihnen so etwas wie:

<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 verwendet das color Feld den Stat, um anzuzeigen, uns des Jobs, wo das _anime Suffix angibt, dass der Job gerade aufgebaut wird.

Leider gibt dies keine Informationen über die tatsächliche Build. Mehrere Instanzen des Jobs werden möglicherweise gleichzeitig ausgeführt, und der laufende Build ist nicht immer der letzte gestartete.

Wenn Sie auflisten möchten alle laufenden baut, können Sie auch die REST-API verwenden, um eine schnelle Antwort zu erhalten, wie folgt aus:

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

geben Sie so etwas wie:

<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> 

Hier sehen Sie eine Liste aller aktuell laufenden Builds. Sie müssen die URL analysieren, um den Jobnamen von der Build-Nummer zu trennen. Beachten Sie, dass my_first_job zwei Builds hat, die gerade ausgeführt werden.

+0

Dies scheint nicht mehr funktionieren, in meinem Fall gibt es alle Jobs, nicht Builds. – sorin

+0

Wenn Sie alle derzeit laufenden Builds (und deren Build-Nummer) benötigen, scheint dies mit der aktuellen Version von Jenkins (2.103) zu funktionieren: http://jenkins.example.com/computer/api/xml?depth=2&tree= Computer [Executoren [currentExecutable [Gebäude, URL]], oneOffExecutors [currentExecutable [Gebäude, URL]]] & xpath = // currentExecutable [Gebäude =% 27true% 27]/url & wrapper = baut – paulyb

8

Sie können mit dem jenkins Baum api tun dies, um einen Endpunkt wie folgt aus:

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

Sie können sehen, was aus lastBuild Attribute, die Sie, wenn Sie <job-endpoint>/lastBuild/api/json zugreifen können.

+0

Wenn Ordner verwendet werden, scheinen sie " Jobs in Jobs verschachtelt ", so wird ein komplizierterer Baum benötigt, z '' '/ api/json? Baum = Jobs [Name, URL, Farbe, lastBuild [Gebäude, Zeitstempel], Jobs [Name, URL, Farbe, lastBuild [Gebäude, Zeitstempel], Jobs [Name, URL, Farbe, lastBuild [Gebäude, Zeitstempel], Jobs [Name, URL, Farbe, lastBuild [Gebäude, Zeitstempel]]]]] & pretty = true''' –

2

Ich hatte ein ähnliches Problem, wo einige Pipeline-Builds im Gebäudezustand stecken bleiben, nachdem ich Jenkins neu starte (piepline Jobs sollen dauerhaft sein und fortsetzen, aber die meiste Zeit bleiben sie auf unbestimmte Zeit stecken).

Diese Builds verwenden keinen Executor, so dass die einzige Möglichkeit, sie zu finden, darin besteht, jeden Job zu öffnen.

Alle anderen Antworten scheinen zu funktionieren, wenn das Projekt als Gebäude betrachtet wird, d. H .: der letzte Build wird erstellt. Aber sie ignorieren frühere Builds, die sich noch entwickeln.

Die folgende Abfrage funktioniert für mich und gibt mir alle derzeit laufenden Builds, d. H .: sie haben kein Ergebnis.

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

Verwandte Themen