Получить параметр из REST-запроса Jenkins - PullRequest
0 голосов
/ 13 июня 2018

Следующий запрос REST вернет параметры последней успешной сборки задания: https://localhost/job/test1/lastSuccessfulBuild/api/jsonМне было бы интересно получить один из параметров этой сборки, BUILD_VERSION:

{

    "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
    "actions": [
        {
            "_class": "hudson.model.CauseAction",
            "causes": [
                {
                    "_class": "hudson.model.Cause$UpstreamCause",
                    "shortDescription": "Started by upstream project \"continuous-testing-pipeline-for-nightly\" build number 114",
                    "upstreamBuild": 114,
                    "upstreamProject": "continuous-testing-pipeline-for-nightly",
                    "upstreamUrl": "job/continuous-testing-pipeline-for-nightly/"
                }
            ]
        },
        { },
        {
            "_class": "hudson.model.ParametersAction",
            "parameters": [

                {
                    "_class": "hudson.model.StringParameterValue",
                    "name": "BUILD_VERSION",
                    "value": "1.1.15"

. Есть ли способ получить BUILD_VERSION (1.1.15) напрямую, используя REST Api, или мне нужноразобрать вручную строку json?Спасибо

Ответы [ 3 ]

0 голосов
/ 19 июня 2018

Да, вы можете получить значение, но оно будет работать только для XML API: (
JSON API вернет упрощенный объект json, используя Tree:)

Таким образом, Jenkins предоставляет вам API (XML), JSON, PYTHON), из которого вы можете прочитать связанные с Дженкинсом данные любого проекта.Подробная документация приведена в https://localhost/job/test1/lastSuccessfulBuild/api

. В ней четко указано, что

  1. XML API - Используйте XPath для управлениянеобходимый фрагмент. Например, ../api/xml?xpath=//[0]

  2. JSON API - Использовать дерево

  3. Python API - Использовать st.literal_eval (urllib.urlopen ("..."). Read ())

Все вышеперечисленное можно использовать для получения конкретного фрагмента / фрагмента из всей грязной информации, получаемой из API.

В вашем случае мы будем использовать дерево по понятным причинам:)

Синтаксис: tree=keyname[field1,field2,subkeyname[subfield1]]

Для получения BUILD_VERSION, т. Е. Значения

//jenkins/job/myjob/../api/json?tree=lastSuccessfulBuild[parameters[value]]

Вышеприведенное должно дать вам то, что вы хотите, но немного отстаети требуется ошибка:)

Вы также можете обратиться сюда для лучшего понимания того, как использовать Tree в JSON API https://www.cloudbees.com/blog/taming-jenkins-json-api-depth-and-tree

Надеюсь, это поможет:)

0 голосов
/ 23 июня 2018

Вот пример с общедоступным экземпляром jenkins и одной из его сборок, чтобы получить параметр "candid_revision" для сборки "lastSuccessfulBuild":

https://jenkins.qa.ubuntu.com/view/All/job/account-plugins-vivid-i386-ci/lastSuccessfulBuild/parameters/

https://jenkins.qa.ubuntu.com/view/All/job/account-plugins-vivid-i386-ci/lastSuccessfulBuild/api/xml?xpath=/freeStyleBuild/action/parameter[name=%22candidate_revision%22]/value

0 голосов
/ 18 июня 2018

Короткий ответ: Нет.

Самый простой способ программно получить доступ к любому атрибуту, предоставляемому через JSON API, - это взять JSON из одного из поддерживаемых Jenkins API JSON (в вашем случае: https://localhost/job/<jobname>/lastSuccessfulBuild/api/json)

  1. Скопируйте полученный JSON в http://json2csharp.com
  2. Сгенерируйте соответствующий код C #.Не забудьте создать значимое имя для класса верхнего уровня.
  3. Программный вызов RestAPI из C # с использованием RestSharp .
  4. Десериализация json в класс C #, который вы определили в2 выше.

Wammo, у вас есть доступ ко всему дереву объектов и всем его значениям.

Я использовал этот подход, чтобы написать сайт MVC5 ASP.NET, который я назвал "BuildDashboard"предоставить всю информацию, которую может пожелать команда разработчиков, и ответить на все вопросы, которые у них были.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...