2017-07-27 123 views
0

所以我尝试了一个嵌入了config.json文件的CI构建。Jenkinsfile - JsonSlurper返回一个字符串,而不是地图

config.json 
{ 
    "some_collection": [ 
    { "foo": "bar" } 
    ] 
} 

我Jenkinsfile:

import groovy.json.JsonSlurper 

node { 
    bootstrap() 
    test() 
} 
def bootstrap() { 
    stage('bootstrap') { 
    git([url: "[email protected]: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"))) 
} 

配置对象的回波显示了JSON,因为它是在文件中,而config.class说是一个普通的老字符串。我期待的代码将返回一个地图。

我试过JsonSlurper和JsonSluperClassic,我也尝试过每种我能想到的方式来重构代码,使其更加明确,并且我的想法已经用完。

编辑:我尝试添加一些强类型:

def getConfig() { 
    JsonSlurper parser = new groovy.json.JsonSlurper() 
    def json = readFile("./config.json") 
    Map parsedJson = parser.parseText(json) 
    return parsedJson 
} 

这还是引起了config.class返回一个字符串

+0

这是什么方法'readFile',它返回什么?你可以尝试用'new File(“./ config.json”)替换它。getText()'?您可以通过用'Map'替换'def'来在'getConfig()'声明中指定您期望的确切类。 –

+0

新的File变体抛出了关于如何在Jenkins的上下文中不允许文件类的错误,我将尝试Map声明。 – DVG

+0

你可以试着让你的'config'对象明确地指向'Map'吗? –

回答

0

Yyou可以使用new File(filename)得到config.json和传球的内​​容它以parse()的方法。

你可以使用:

def getConfig() { 
    def pjson = new groovy.json.JsonSlurper().parse(new File('./config.json')) 
    assert pjson instanceof Map 
    pjson 
} 
+0

'脚本不允许使用新的java.io.File java.lang.String'不幸 – DVG

+0

你看起来需要提供权限吗?请参阅[this](https://issues.jenkins-ci.org/browse/JENKINS-34638) – Rao

相关问题