引言
最近在pipeline中checkout代码时遇到了“不可序列化”(java.io.NotSerializableException)的问题。这个问题只在特定的场景下能重现,虽然影响不大,但如果深入研究一下,可以加深对Jenkins Pipeline的理解。
问题重现
我们知道,在使用Multi-branch pipeline时,可以在job的配置中指定源代码的来源,如git url,credentials,clone options,submodule options等等。然后在pipeline中,可以直接调用:
checkout scm
下载代码。这个scm对象对象由Jenkins的Git插件提供,里面包含了之前配置的源代码的所有信息。然而有的时候,我们也需要对配置好的scm进行订制:
checkout(
[
$class: 'GitSCM',
branches: scm.branches,
extensions: scm.extensions + [
[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules