Ich versuche, eine Jenkins Post build plugin
zu erstellen, wo ich JSON
Datei verarbeiten muss (enthält Testergebnisse) und zeigen Sie in tabular format
in Jenkins
sobald Build ausgeführt wird.Gelee: Erstellen Sie eine Tabelle mit JSON-Objekt
Im Folgenden sind die Schritte bis jetzt getan:
- Erstellt Jenkins Plugin
- Able JSON-Datei Inhalt abzurufen und zu lesen, wie Google
JSONElement
Gson. - Gebaut
BuildAction
(erweitert Aktion), um die Ergebnisse anzuzeigen. - In
index.jelly
(view
fürBuildAction
) entsprechendBuildAction
, versuchen, jeden Datensatz in JSON-Datei als Zeile anzuzeigen.
JSON
Datei Beispiel:
{
"records": [{
"objectProps": {
"OTYPE": "TEST",
"NAME": "testMethodError",
}
},
{
"objectProps": {
"OTYPE": "TEST",
"NAME": "testMethodFail",
}
}]
}
Buildaction-Klasse:
public class BuildAction implements Action {
private JsonElement results;
private Run<?, ?> build;
TaskListener listener;
// this value referred as `it.results` in `index.jelly`
public JsonArray getResults(){
return results.getAsJsonObject().get("records").getAsJsonArray();
}
}
aktuellen index.jelly
für oben BuildAction
Klasse
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout">
<l:layout>
<st:include it="${it.build}" page="sidepanel.jelly"/>
<l:main-panel>
<table> Test - Wise Results
<j:forEach items="${it.results}" var="i">
<tr><td>Test case name: ${i}</td></tr>
</j:forEach>
</table>
</l:main-panel>
</l:layout>
</j:jelly>
Act Verhalten:
Ab sofort ist ${results}
Wert von JSONArray
Typ. forEach in Gelee, kann ich über iterieren und den Datensatz mit var i
(Syntax ${i}
) erhalten. i
bezieht sich auf jeden Datensatz in records
JSONArray. Nun möchte ich objectProps.NAME
Feld mit i
zugreifen, ich weiß nicht die Syntax in Jelly, um das gleiche zu erreichen.
erwartetes Verhalten:
I durch records
Array in JSON Datei und jedes Kind/JsonObject als eine Tabellenzeile (und ihre Werte als entsprechende Spalten) iterieren wan.
etwas Ähnliches wie diese (für den Zugriff NAME
Wert):
<j:forEach items="${it.results}" var="i">
<tr><td>Test case name: ${i}."objectProps"."NAME"</td></tr>
</j:forEach>
beim Aufbau der table
aus einem JSON
mit Jelly
Hilfe brauchen. Jeder andere Weg, um das gleiche zu erreichen, ist ebenfalls willkommen (bitte Code-Beispiele beifügen, wenn Sie dasselbe vorschlagen).
Hinweis:Groovy
bezogene Antwort auch willkommen, da Jenkins
Unterstützung sowohl Jelly and Groovy
für View
.
Zuerst muss ich Ihre Begeisterung schätzen. und ja, es hat für mich funktioniert. '$ {i.objectProps.NAME}' hat mir den Wert in Anführungszeichen gebracht (zB: 'Name des Testfalls:" testMethodError "'). 1. Gibt es eine Möglichkeit, sie zu entfernen und nur Inhalte anzuzeigen? Ich denke 'g: evaluate' ist spezifisch für' serviceNow', aber nicht Teil von 'Apache Jelly'. 2. Sind Sie sicher, dass wir das nutzen können? Ich habe das müde. Es hat zwar keinen Fehler ausgelöst, aber es als "Klartext" anstelle von "Javascript" ausgeführt. –
1) Nach dem, was ich gesehen habe, wird alles in '$ {}' als grooviger Code ausgeführt. Ich bin mir nicht bewusst, woher diese doppelten Anführungszeichen kommen könnten, Sie könnten versuchen, sie dort mit etwas wie '$ {i.objectProps.NAME.replace (/ needRegEx /," ")}' zu entfernen. Das würde funktionieren, wenn sie in Ihren Daten sind, wenn Gelee sie addiert, dann könnte es möglicherweise komplizierter sein. 2) Ich war mir nicht sicher, ob es funktioniert, aber es scheint wirklich spezifisch für 'serviceNow' zu sein. – Bricktop
ok. Vielen Dank. Ich werde es ausprobieren. kann keine Kopfgelder anbieten, bis ein Tag nach dem Start abgeschlossen ist. Also, werde ich anbieten, sobald ich das Privileg habe. Eine weitere Herausforderung, der ich mich gegenübersehe ist, dass ich versuche, 'index.jelly' in' index.groovy' zu konvertieren. Aber in der Zeile 'st.include (it: it.build, page:" sidepanel.jelly ")', verursacht die Null Pointer-Ausnahme. Wenn du weißt, kannst du bitte die 'groovy' Version von oben' index.jelly' posten? –