web-dev-qa-db-fra.com

Jenkins REST API - utilisation de l'arborescence pour référencer un élément spécifique dans un tableau JSON

Je peux utiliser l'API Jenkins pour obtenir des informations sur ma version via l'URL

http://localhost:8080/job/myjob/149/api/json

Je souhaite pouvoir interroger le nœud changeSet à l'aide du paramètre de chaîne de requête d'arbre. Je peux interroger avec succès des nœuds non indexés comme "durée" via

http://localhost:8080/job/myjob/149/api/json?tree=duration

Comment interroger des nœuds indexés comme changeSet? Je n'arrive pas à trouver de doc n'importe où.

{
    "actions": [
        {
            "causes": [
                {
                    "shortDescription": "Started by an SCM change"
                }
            ]
        },
        {},
        {},
        {}
    ],
    "artifacts": [],
    "building": false,
    "description": null,
    "duration": 80326,
    "estimatedDuration": 68013,
    "executor": null,
    "fullDisplayName": "my project #149",
    "id": "2013-06-14_14-31-06",
    "keepLog": false,
    "number": 149,
    "result": "SUCCESS",
    "timestamp": 1371234666000,
    "url": "http://localhost:8080/job/my project/149/",
    "builtOn": "",
    "changeSet": {
        "items": [
            {
                "affectedPaths": [
                    "SearchViewController.m",
                    "Sample.strings"
                ],
                "author": {
                    "absoluteUrl": "http://localhost:8080/user/my user",
                    "fullName": "My User"
                },
                "commitId": "9032",
                "timestamp": 1371234304048,
                "date": "2013-06-14T18:25:04.048031Z",
                "msg": "Author:my_author Description: changes Id: B-186199 Reviewer:reviewer_name",
                "paths": [
                    {
                        "editType": "edit",
                        "file": "/branches/project_name/iOS/_MainLine/project_name/SearchViewController.m"
                    },
                                       ],
                "revision": 9032,
                "user": "user_name"
            }
        ],
        "kind": "svn",
        "revisions": [
            {
                "module": "repo_url",
                "revision": 8953
            },
            {
                "module": "repo_url",
                "revision": 9032
            }
        ]
    },
    "culprits": [
        {
            "absoluteUrl": "http://localhost:8080/user/username",
            "fullName": "username"
        }
    ]
}
33
mckeejm

La documentation de l'API a un indice:

Une alternative plus récente est le paramètre de requête d'arborescence. [snip] vous avez seulement besoin de savoir quels éléments vous recherchez, plutôt que ce que vous ne recherchez pas (qui est de toute façon une liste ouverte lorsque les plugins peuvent apporter des éléments API). La valeur doit être une liste de noms de propriétés à inclure, avec des sous-propriétés entre accolades carrées.

Pour une liste simple, obtenez le sous-arbre entier avec:

http://jenkins/job/myjob/../api/json?tree=artifacts[*]

ou répertoriez des propriétés spécifiques dans les accolades.

Pour changeSet, utilisez

http://jenkins/job/myjob/../api/json?tree=changeSet[*[*]]

pour tout récupérer.

Utilisez des accolades carrées imbriquées pour des sous-sous-propriétés spécifiques, par exemple:

http://jenkins/job/myjob/../api/json?tree=changeSet[items[revision]]

La documentation de l'arborescence indique qu'elle est destinée aux cas où l'appelant ne sait pas quelles propriétés récupérer.

51
Dave Bacher