Разбор JSON на трубопроводе Jenkins (заводной) - PullRequest
0 голосов
/ 15 марта 2019

Я создал метод, как показано в Интернете:

@NonCPS
def parseJsonString(String jsonString) {
    def lazyMap = new JsonSlurper().parseText(jsonString)

    // JsonSlurper returns a non-serializable LazyMap, so copy it into a regular map before returning
    def m = [:]
    m.putAll(lazyMap)
    return m
}

Но я получаю следующую ошибку:

ОШИБКА: java.io.NotSerializableException: groovy.json.internal.LazyMap

Чтобы обойти это, я должен создать целый метод для выполнения всего шага.Например, в методе я бы сделал то же, что и выше, проанализировал бы нужную мне информацию и, наконец, возвратил бы ее в виде строки.

Это, однако, представляет другую проблему, особенно если вы оберните этот метод внутри«withCredentials», который затем требует другого «withCredentials».

1 Ответ

1 голос
/ 15 марта 2019

Наконец-то я нашел ЛУЧШЕЕ решение!

Метод readJSON () из плагина Jenkins "Pipeline Utility Steps", как показано здесь:

https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readjson-read-json-from-files-in-the-workspace

Вотпример, где мы можем окончательно избавиться от этого уродливого дерьма GROOVY JSONPARSE.

node() {
    stage("checkout") {
        def jsonString = '{"name":"katone","age":5}'
        def jsonObj = readJSON text: jsonString

        assert jsonObj['name'] == 'katone'  // this is a comparison.  It returns true
        sh "echo ${jsonObj.name}"  // prints out katone
        sh "echo ${jsonObj.age}"   // prints out 5
    }
}
...