2016-05-23 8 views
4

Ich versuche, Pipelineskript in Jenkins auszuführen. Hier ist mein Skript:java.io.NotSerializableException: hudson.model.FreeStyleProject

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')]]; 

} 

Aber ich bin immer wieder NotSerializableException bekommen. Ich denke, etwas stimmt nicht mit meiner Methode "getJobVariable". Bitte helfen

Antwort

5

Ich habe einige Tests gemacht, weil ich das gleiche Problem in meiner Pipeline Aufträge (Matrix) haben.

Die Lösung ist def vor job oder der Name des Objekts (hier Job) vor Ihrer Erklärung zu setzen.

Nach der NotSerializableException verschwinden.

Wenn dies Ihr Problem nicht löst, können Sie vor Ihrer Deklaration auch @NonCPS Flag hinzufügen. Siehe die offizielle Dokumentation: serializing-local-variables.

+0

@Sviatlana Hat Ihnen die Antwort geholfen? weil ich das gleiche Problem habe, aber diese Antwort funktioniert nicht für mich –

+0

@HanJubel Ich habe meine Antwort aktualisiert. – Algorys

0

Fügen Sie den folgenden:

job = null after newJob = job.getLastBuild()