所以我尝试了嵌入了config.json文件的CI版本。
config.json
{
"some_collection": [
{ "foo": "bar" }
]
}
My Jenkinsfile:
import groovy.json.JsonSlurper
node {
bootstrap()
test()
}
def bootstrap() {
stage('bootstrap') {
git([url: "git@github.com:my-user/my-jenkinsfile-repo.git"])
}
}
def test() {
def config = getConfig()
echo "${config}"
echo "${config.class}"
}
@NonCPS
def getConfig() {
new JsonSlurper().parseText(readFile("./config.json")))
}
config对象的echo显示文件中的json,而config.class表示是一个普通的旧字符串。我希望代码能够返回Map。
我已经尝试过JsonSlurper和JsonSluperClassic,我也尝试了各种方法来重新构建代码以使其更加明确,而且我已经没有想法了。
编辑:我尝试添加一些强类型:def getConfig() {
JsonSlurper parser = new groovy.json.JsonSlurper()
def json = readFile("./config.json")
Map parsedJson = parser.parseText(json)
return parsedJson
}
这仍然导致config.class作为String
返回答案 0 :(得分:0)
您可以使用new File(filename)
获取config.json
的内容并将其传递给parse()
方法。
你可以使用:
def getConfig() {
def pjson = new groovy.json.JsonSlurper().parse(new File('./config.json'))
assert pjson instanceof Map
pjson
}
答案 1 :(得分:0)
使用默认库处理Jenkins中的JSON是一团糟。只需使用Pipeline Utility Steps Plugin中的readJSON
步骤即可。 https://github.com/jenkinsci/pipeline-utility-steps-plugin/blob/master/docs/STEPS.md