我正在尝试创建一个简单的作业,该作业在具有特定标签的所有在线节点上运行。我可以获得节点名,并期望下面的代码能够工作。然而,我得到了下面的异常。
def newJob(x)
{
return {
node(x) {
bat "dir"
}
}
}
def jobs = [:]
def lgroups = Jenkins.instance.getLabel('win7')
for (g in lgroups) {
for (node in g.getNodes()) {
def nodeName = node.getNodeName()
if (Jenkins.instance.getNode(nodeName).toComputer().isOnline())
{
jobs["${nodeName}_BS"] = newJob(nodeName)
}
}
}
parallel jobs该作业配置为在未启用沙箱的情况下运行。例外:
an exception which occurred:
in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@90def78
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.LoopBlockScopeEnv@32864b7a
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@5a2e37ea
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@fb260f7
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.LoopBlockScopeEnv@fa692c0
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@15ffb7f2
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@60b6bff4
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@4e29d7b4
in field com.cloudbees.groovy.cps.impl.CallEnv.caller
in object com.cloudbees.groovy.cps.impl.FunctionCallEnv@1fa0ac69
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@1efd7828
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@157768c5
in field com.cloudbees.groovy.cps.impl.CpsClosureDef.capture
in object com.cloudbees.groovy.cps.impl.CpsClosureDef@6c20bc58
in field com.cloudbees.groovy.cps.impl.CpsClosure.def
in object org.jenkinsci.plugins.workflow.cps.CpsClosure2@757fe932
in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@31a3450e
in field com.cloudbees.groovy.cps.impl.CpsClosureDef.capture
in object com.cloudbees.groovy.cps.impl.CpsClosureDef@4d20e584
in field com.cloudbees.groovy.cps.impl.CpsClosure.def
in object org.jenkinsci.plugins.workflow.cps.CpsClosure2@59bab622
in field org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.closures
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@5fa55074
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@5fa55074
Caused: java.io.NotSerializableException: hudson.model.labels.LabelAtom发布于 2018-02-08 18:05:34
您必须将不可序列化的代码提取到一个使用@NonCPS注释的方法中,可能类似于以下内容:
@NonCPS
def getParallel() {
def jobs = [:]
def lgroups = Jenkins.instance.getLabel('win7')
for (g in lgroups) {
for (node in g.getNodes()) {
def nodeName = node.getNodeName()
if (Jenkins.instance.getNode(nodeName).toComputer().isOnline())
{
jobs["${nodeName}_BS"] = newJob(nodeName)
}
}
}
return jobs
}
parallel getParallel()https://stackoverflow.com/questions/48681010
复制相似问题