web-dev-qa-db-ja.com

Jenkins Pipeline(Groovy)でのJSONの解析

オンラインで示すようにメソッドを作成しました:

@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」が必要になります。

8
Katone Vi

ようやく、より良い解決策を見つけました!

次に示すように、Jenkinsの「Pipeline Utility Steps」プラグインのreadJSON()メソッド:

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
    }
}
14
Katone Vi