java.io.NotSerializableException:hudson.model.FreeStyleProject

时间:2016-05-23 10:41:44

标签: jenkins groovy jenkins-pipeline

我正在尝试在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方法有问题。请帮忙

3 个答案:

答案 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