jelly:使用JSON对象创建表

时间:2017-01-25 10:19:41

标签: java json jenkins groovy jelly

我正在尝试构建Jenkins Post build plugin,我必须处理JSON文件(包含测试结果),并在执行构建后在tabular format Jenkins中显示它。

以下是迄今为止所做的步骤:

  1. 创建Jenkins插件
  2. 能够检索JSON文件内容并将其读作Google gson JSONElement
  3. 构建BuildAction(扩展操作)以显示结果。
  4. 在与index.jelly对应的viewBuildAction BuildAction)中,尝试将每个记录显示在JSON文件中,作为一行。
  5. 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>
    

    需要帮助,使用tableJSON中构建Jelly。任何其他实现相同的方式也欢迎(请在建议相同时发布代码示例)。

    注意: Groovy相关回答也欢迎Jenkins支持Jelly and Groovy View

1 个答案:

答案 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.

上找到一些文档