2017-07-27 17 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"))) 
} 

それがファイルであるようconfigオブジェクトのエコーは、JSONを示し、config.classは、昔ながらの文字列であると言います。コードを返すことを期待しています。

私はJsonSlurperとJsonSluperClassicを試してみましたが、もっと明確になるようにコードを再構成すると思います。

EDIT:これはまだconfig.classがYyouがconfig.jsonやパスの内容を取得するためにnew File(filename)を使用することができます

+0

このメソッドは 'readFile'とは何ですか?返される内容は何ですか? 'new File(" ./config.json ")。getText()'で置き換えることができますか?また、 'get'を' Map'に置き換えることで 'getConfig()'宣言で期待する正確なクラスを指定することができます。 –

+0

新しいファイルバリアントは、Jenkinsのコンテキストでファイルクラスがどのように許可されなかったかについてのエラーを投げました。私はマップ宣言を試みます。 – DVG

+0

'config'オブジェクトを明示的に' Map'にすることもできますか? –

答えて

0

文字列として返すようになり

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

:私はいくつかの強い型付けを追加しようとしましたそれはparse()メソッドに。あなただけ使用することができます

:ジェンキンスでJSONを扱う

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

関連する問題