Gelöst : Dank der unten stehenden Antwort von S.Richmond. Ich musste alle gespeicherten Karten des groovy.json.internal.LazyMap
Typs deaktivieren, was bedeutete, dass die Variablen ungültig wurden envServers
und object
nach der Verwendung.
Zusätzlich : Personen, die nach diesem Fehler suchen, könnten daran interessiert sein, readJSON
stattdessen den Jenkins-Pipeline-Schritt zu verwenden. Weitere Informationen finden Sie hier .
Ich versuche, Jenkins Pipeline zu verwenden, um Eingaben vom Benutzer zu übernehmen, die als JSON-Zeichenfolge an den Job übergeben werden. Pipeline analysiert dies dann mit dem Slurper und ich suche die wichtigen Informationen aus. Diese Informationen werden dann verwendet, um einen Job mehrmals parallel zu unterschiedlichen Jobparametern auszuführen.
Bis ich den Code unten hinzufüge, "## Error when below here is added"
läuft das Skript einwandfrei. Sogar der Code unter diesem Punkt wird von selbst ausgeführt. Aber wenn kombiniert, erhalte ich den folgenden Fehler.
Ich sollte beachten, dass der ausgelöste Job aufgerufen wird und erfolgreich ausgeführt wird, aber der folgende Fehler auftritt und den Hauptjob fehlschlägt. Aus diesem Grund wartet der Hauptjob nicht auf die Rückgabe des ausgelösten Jobs. Ich könnte versuchen, das zu umgehen, build job:
aber ich möchte, dass der Hauptjob auf das Ende des ausgelösten Jobs wartet.
Kann hier jemand helfen? Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.
Prost
def slurpJSON() {
return new groovy.json.JsonSlurper().parseText(BUILD_CHOICES);
}
node {
stage 'Prepare';
echo 'Loading choices as build properties';
def object = slurpJSON();
def serverChoices = [];
def serverChoicesStr = '';
for (env in object) {
envName = env.name;
envServers = env.servers;
for (server in envServers) {
if (server.Select) {
serverChoicesStr += server.Server;
serverChoicesStr += ',';
}
}
}
serverChoicesStr = serverChoicesStr[0..-2];
println("Server choices: " + serverChoicesStr);
## Error when below here is added
stage 'Jobs'
build job: 'Dummy Start App', parameters: [[$class: 'StringParameterValue', name: 'SERVER_NAME', value: 'TestServer'], [$class: 'StringParameterValue', name: 'SERVER_DOMAIN', value: 'domain.uk'], [$class: 'StringParameterValue', name: 'APP', value: 'application1']]
}
Error:
java.io.NotSerializableException: groovy.json.internal.LazyMap
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:569)
at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.util.LinkedHashMap.internalWriteEntries(Unknown Source)
at java.util.HashMap.writeObject(Unknown Source)
...
...
Caused by: an exception which occurred:
in field delegate
in field closures
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@5288c