Use JsonSlurperClassic
instead.
Since Groovy 2.3 (note: Jenkins 2.7.1 uses Groovy 2.4.7) JsonSlurper
returns LazyMap
instead of HashMap
. This makes new implementation of JsonSlurper
not thread safe and not serializable. This makes it unusable outside of @NonDSL functions in pipeline DSL scripts.
However you can fall-back to groovy.json.JsonSlurperClassic
which supports old behavior and could be safely used within pipeline scripts.
Example
import groovy.json.JsonSlurperClassic
@NonCPS
def jsonParse(def json) {
new groovy.json.JsonSlurperClassic().parseText(json)
}
node('master') {
def config = jsonParse(readFile("config.json"))
def db = config["database"]["address"]
...
}
ps. You still will need to approve JsonSlurperClassic
before it could be called.