我正在尝试构建Jenkins Post build plugin
,我必须处理JSON
文件(包含测试结果),并在执行构建后在tabular format
Jenkins
中显示它。
以下是迄今为止所做的步骤:
JSONElement
。BuildAction
(扩展操作)以显示结果。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
数组,并将每个子/ 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
。
答案 0 :(得分:1)
我有兴趣解决您的问题,但可能没有100%肯定的答案,因为我无法在本地测试。
您是否尝试在示例中使用 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
或${i.objectProps.NAME}
代替${i."objectProps"."NAME"}
?
你还可以看到${i}."objectProps"."NAME"
是否可用,因为果冻可能无法评估你的变量而没有明确告诉它这样做。您可以在g:evaluate
here.