Jenkinsfile - JsonSlurper返回一个字符串而不是一个地图

时间:2017-07-27 12:23:32

标签: jenkins groovy jenkins-pipeline

所以我尝试了嵌入了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

返回

2 个答案:

答案 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