Jenkins REST API - using tree to reference specific item in JSON array

56,655

The API documentation has a hint:

A newer alternative is the tree query parameter. [snip] you need only know what elements you are looking for, rather than what you are not looking for (which is anyway an open-ended list when plugins can contribute API elements). The value should be a list of property names to include, with subproperties inside square braces.

For a simple list, get the whole subtree with:

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

or list specific properties within the braces.

For changeSet, use

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

to retrieve everything.

Use nested square braces for specific sub-subproperties, e.g.:

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

The tree documentation says that it's intended for cases where the caller doesn't know what properties to retrieve.

Share:
56,655
mckeejm
Author by

mckeejm

Updated on April 04, 2020

Comments

  • mckeejm
    mckeejm about 4 years

    I am able to use the Jenkins API to get information about my build via the url

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

    I want to be able to query the changeSet node using the tree query string parameter. I can successfully query non-indexed nodes like "duration" via

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

    How do I query indexed nodes like changeSet? I can't seem to find any doc anywhere.

    {
        "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"
            }
        ]
    }
    
  • mckeejm
    mckeejm almost 11 years
    Thanks Dave... I fiddled around with it and eventually got there...although the [*] is quite useful and brand new to me. Which doc did you load up to find this though? I kept searching within the doc that is referenced from the Jenkins dashboard and couldn't seem to find it... but obviously it could have been easily overlooked.
  • MarkHu
    MarkHu about 8 years
    Note that curl requires backslash-escaped square-brackets inside double-quotes. Example: $ curl -s -k "https://$jenkins/pluginManager/api/json?pretty=1&tree=plugi‌​ns\[shortName,longNa‌​me,version\]"