2017-06-19 1 views
1

schrieb ich die folgende Funktion, die meine Pipeline geladen wird:Was ist "nicht serialisierbar" in dieser Groovy-Methode?

def userTrigger() { 
    [$class: 'UsernamePasswordMultiBinding', credentialsId: jenkins_creds, usernameVariable: 'J_USER', passwordVariable: 'J_PASS'], 
    ]){ 
     cmd = "curl -s -u \${J_USER}:\${J_PASS} \${env.BUILD_URL}api/json | python -mjson.tool | grep userId | awk '{print \$2}' | tr -d '"|,' " 
     def ut = sh(returnStdout: true, script: cmd) 
     return ut 
    } 
} 

Das Ergebnis sollte der Benutzername des derjenige sein, der den Build ausgelöst, bevor die Ausgabe der Reinigung es sieht so aus:

"userId": "itaig", 

im Grunde ist dies:

awk -F'"' '{print $4}' 

würde mir auch die erforderliche Leistung, aber ich bin nicht sicher, wie auch Zeichen in dieser Aussage zu entkommen.

Als ich den Auftrag ausführen, bekomme ich folgende Fehlermeldung:

java.io.NotSerializableException: org.codehaus.groovy.control.ErrorCollector 
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860) 
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032) 
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988) 
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854) 

Ich bin ziemlich sicher, es hat etwas mit meiner versucht zu entkommen den entsprechenden Zeichen zu tun, aber ich habe das Gefühl, dass ich haven ‚t es richtig gemacht, ich habe versucht, zu entkommen die (") am Ende der cmd Linie, aber ohne Erfolg.

können Sie versuchen, mein Problem zu finden?

Antwort

2

Was ist die rechte Klammer und Recht Klammer schließen auf Linie # 3?

Es könnte mehr von der Doppel-Zitat vs Single-Quote dann die Flucht von Zeichen sein - stellen Sie sicher, dass sie sich gut paaren.

+0

Das ist die Art und Weise, die UsernamePasswordMultiBinding-Klasse zu verwenden. Ich benutze sie, um jenkins-Benutzernamen und -Passwort als maskierte Werte in den curl-Befehl zu injizieren. –

+0

Sie können es hier sehen: https://support.cloudbees.com/hc/en-us/articles/204897020-Fetch-a-userid-and-password-from-a-Credential-object-in-a-Pipeline -job-? mobile_site = true –

+0

@ItaiGanot - In den Beispielen in Ihrem Link sind alle Klammern "balanced", aber das Beispiel in Ihrer Frage die Klammern sind "unsymmetrisch". Nachdem ich manuell gezählt habe (Start bei Null +1 für eine Linke, -1 für eine Rechte), die Beispiele und ein paar der Beispiele - nur Ihre gepostete Antwort ist unsymmetrisch. Ich habe mit dem Notepad ++ Plugin "BracketsCheck" und allen Beispielen aus der verlinkten Seite einen Doppel-Check gemacht - und der Beispiel-Code in Ihrer Frage schlägt als "unsymmetrisch" fehl. Ich zähle 1 linke Klammer und 2 rechte Klammern. Denke nicht, dass ich darüber hinaus helfen kann :-). –