Jenkins Pipeline - 不能使用ConfigSlurper,因为ConfigObject不可序列化?

时间:2017-10-05 22:58:28

标签: jenkins groovy jenkins-pipeline

我尝试使用groovy ConfigSlurper加载与构建相关的外部配置文件。我可以加载文件,但是如果我尝试在管道阶段访问它,Jenkins就会死掉一个" java.io.NotSerializableException:groovy.util.ConfigObject",但util.ConfigObject是可序列化的?是什么给了什么?

是否有其他方式以可返回对象的方式访问配置文件,以便我可以访问配置项,如:buildConfig.scm.someUser?

2 个答案:

答案 0 :(得分:2)

使用json格式作为配置

readJSON步骤阅读

如果你有这个cfg.json文件

svg

然后此代码有效:

{
  "scm":{
    "someUser":"myUser"
  }
}

或者您可以将yaml格式和readYaml step与yaml文件一起使用,如下所示:

def buildConfig = readJSON file: 'cfg.json'
def user = buildConfig.scm.someUser
assert user == "myUser"

答案 1 :(得分:1)

请不要使用ConfigSlurper - 在Groovy中实现它的方式意味着它会在Pipeline中导致严重的内存泄漏。不幸的是,它没有详细记录(我今天需要解决的问题),但这是noted in the source code并且会在提示中定期提及。

相反,更喜欢Pipeline Utility Steps - readYaml,readProperties,readJson等 - 这些都是安全的构造,并且可能会更好一些。