Je suis en train de construire un Jenkins Post build plugin
où je dois traiter le fichier JSON
(contient les résultats des tests) et l'afficher dans tabular format
en Jenkins
une fois la construction est exécutée.gelée: Créer une table à l'aide objet JSON
Voici les étapes effectuées jusqu'à présent:
- Créé plug-in Jenkins
- Capable de récupérer le contenu du fichier JSON et lire comme Google gson
JSONElement
. - Construit
BuildAction
(étend action) pour afficher les résultats. - En
index.jelly
(view
pourBuildAction
) correspondant àBuildAction
, en essayant d'afficher chaque enregistrement dans le fichier JSON, en tant que ligne.
JSON
échantillon de fichier:
{
"records": [{
"objectProps": {
"OTYPE": "TEST",
"NAME": "testMethodError",
}
},
{
"objectProps": {
"OTYPE": "TEST",
"NAME": "testMethodFail",
}
}]
}
classe BuildAction:
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();
}
}
index.jelly
actuel au-dessus BuildAction
classe
<?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>
Loi Comportement final:
A partir de maintenant, la valeur ${results}
est de type JSONArray
. forEach en gelée, je suis capable de parcourir et d'obtenir l'enregistrement en utilisant var i
(syntaxe ${i}
). i
fait référence à chaque enregistrement dans records
JSONArray. Maintenant, je veux accéder au champ objectProps.NAME
en utilisant i
, je ne connais pas la syntaxe dans Jelly pour atteindre la même chose.
comportement attendu:
I wan pour itérer tableau records
dans le fichier JSON et chaque enfant/JsonObject comme une ligne de la table (et ses valeurs en tant que colonnes correspondantes).
quelque chose de similaire à ce (pour accéder valeur NAME
):
<j:forEach items="${it.results}" var="i">
<tr><td>Test case name: ${i}."objectProps"."NAME"</td></tr>
</j:forEach>
Besoin d'aide dans la construction de l'table
d'un JSON
en utilisant Jelly
. Toute autre façon de réaliser la même chose est la bienvenue (s'il vous plaît envoyer des exemples de code en suggérant la même chose).
Note:Groovy
réponse concernant également les bienvenus comme Jenkins
soutien à la fois Jelly and Groovy
pour View
.
D'abord, je dois apprécier votre enthousiasme. et oui, ça a marché pour moi. '$ {i.objectProps.NAME}' m'a donné la valeur entre guillemets (par exemple: 'Test case name:" testMethodError "'). 1. Y a-t-il un moyen de les supprimer et d'afficher uniquement du contenu? Je pense que «g: evaluate» est spécifique à la société «serviceNow» mais ne fait pas partie de «Apache Jelly». 2. Êtes-vous sûr de pouvoir l'utiliser? Je me suis fatigué. Bien qu'il n'ait pas jeté d'erreur, mais l'exécutant comme 'plain text' au lieu de' javascript'. –
1) A en juger par ce que j'ai vu, tout ce qui est dans '$ {}' est exécuté sous forme de code groovy. Je ne suis pas au courant d'où ces doubles guillemets pourraient provenir, vous pouvez essayer de les supprimer là avec quelque chose comme '$ {i.objectProps.NAME.replace (/ neededRegEx /," ")}'. Cela fonctionnerait si elles sont dans vos données, si la gelée les ajoute, alors cela pourrait être plus compliqué. 2) Je n'étais pas sûr que ça marche, mais cela semble être spécifique à 'serviceNow'. – Bricktop
ok. Merci. Je vais l'essayer. ne peut pas offrir la prime jusqu'à ce qu'un jour se termine une fois qu'il commence. donc, offrira une fois que j'aurai le privilège. Un autre défi auquel je suis confronté est celui, en essayant de convertir le script 'index.jelly' en' index.groovy'. Mais dans la ligne 'st.include (it: build, page:" sidepanel.jelly ")', provoquant l'exception Null Pointer. Si vous le savez, pouvez-vous poster la version 'groovy' ci-dessus' index.jelly'? –