pipeline序列化问题

Jenkins支持所有运行的job都可以在服务重启时中断、暂停在服务重启后恢复运行。为了实现这一点,Jenkins pipeline中定义的所有变量都必须是可序列化的。类似的,Jenkins也必须能序列化构建中节点和子job之间的全局变量的状态。

遇到java.io.NotSerializableException问题的一般方法

  1. 将不可序列化的代码封装在一个用@NonCPS注释的函数中。这告诉Jenkins函数包含不可序列化的部分,必须在不可中断的情况下执行。使用NonCPS的函数中不能调用任何jenkins steps或其他CPS-transformed的代码。
  2. 尝试取消不可序列化变量的定义

更多详细信息参见链接

json解析

1
2
3
4
5
6
7
8
9
10
11
12
13
import groovy.json.JsonSlurperClassic 

@NonCPS
def jsonParse(def json) {
new groovy.json.JsonSlurperClassic().parseText(json)
}

node('master') {
def config = jsonParse(readFile("config.json"))

def db = config["database"]["address"]
...
}

参考1
参考2
参考3