我正在尝试构建一个Jenkins Post build plugin
,在其中必须处理JSON
文件(包含测试结果),并在执行构建后将其显示在tabular format
中的Jenkins
中。
到现在为止,已完成以下步骤:
创建了Jenkins插件
能够检索JSON文件内容并将其读取为Google gson JSONElement
。
建立BuildAction
(扩展Action)以显示结果。
在与index.jelly
对应的view
(对于BuildAction
的BuildAction
)中,尝试将JSON文件中的每条记录显示为一行。JSON
文件样本:
{
"records": [{
"objectProps": {
"OTYPE": "TEST",
"NAME": "testMethodError",
}
},
{
"objectProps": {
"OTYPE": "TEST",
"NAME": "testMethodFail",
}
}]
}
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
类的当前BuildAction
<?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>
实际行为:
到目前为止,
${results}
的值为JSONArray
类型。在果冻中,forEach可以遍历并使用var i
(语法${i}
)获取记录。 i
引用records
JSONArray中的每个记录。现在,我想使用objectProps.NAME
访问i
字段,我不知道Jelly中的语法可以实现相同的目的。预期的行为:
我想遍历JSON文件中的
records
数组,并将每个child / jsonObject作为一个表行(及其值作为对应的列)进行迭代。与此类似的东西(访问
NAME
值):<j:forEach items="${it.results}" var="i">
<tr><td>Test case name: ${i}."objectProps"."NAME"</td></tr>
</j:forEach>
在使用
table
从JSON
中构建Jelly
时需要帮助。也可以采用任何其他方式来实现此目的(建议相同时请提供邮政编码示例)。注意:也欢迎与
Groovy
相关的答案,因为Jenkins
同时支持Jelly and Groovy
和View
。 最佳答案
我有兴趣解决您的问题,但可能无法100%确定答案,因为我无法在本地进行测试。
在您的示例中,您是否尝试过使用${i.objectProps.NAME}
或${i."objectProps"."NAME"}
代替${i}."objectProps"."NAME"
?
您还可以查看g:evaluate
是否可用,因为果冻可能在未明确告知变量的情况下无法评估您的变量。您可以在g:evaluate
here.上找到一些文档。