我正在尝试在Jenkins中执行管道脚本。 这是我的剧本:
import com.cloudbees.groovy.cps.NonCPS
@NonCPS
def getJobVariable(jobName,varName){
job = Jenkins.instance.getItemByFullName(jobName)
newJob = job.getLastBuild()
return newJob.getEnvVars().get(varName,null)
}
node{
stage 'props'
api = build job: 'Props'
buildID = api.getNumber()
build job: 'Parameterized', parameters: [[$class: 'StringParameterValue', name: 'string_parameter', value: getJobVariable('Props','filename')]];
}
但我经常收到NotSerializableException。我想,我的getJobVariable方法有问题。请帮忙
答案 0 :(得分:12)
我做了一些测试,因为我在管道工作中遇到了同样的问题(对于Matrix)。
解决方案是在声明之前将def
放在job
之前或将对象的名称(此处为Job
)放置。
NotSerializableException
消失后。
如果这不能解决您的问题,您还可以在声明之前添加@NonCPS
标志。请参阅官方文档:serializing-local-variables。
答案 1 :(得分:2)
添加以下内容:
job = null after newJob = job.getLastBuild()
答案 2 :(得分:1)
Jenkins阶段需要序列化,这样它们才能生存下来并重新启动。
现在,如果您在阶段[Pipeline] // stage
之后仍然有一些具有NotSerializable的变量,那么我们会收到此错误。
所以我们应该在变量碰到舞台边界之前将其设置为null
进一步阅读https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md#serializing-local-variables