Rozwiązany : Dzięki poniższej odpowiedzi od S.Richmond. Musiałem usunąć wszystkie zapisane mapy groovy.json.internal.LazyMap
typu, który oznaczał anulowanie zmiennych envServers
i object
po ich użyciu.
Dodatkowe : osoby szukające tego błędu mogą readJSON
zamiast tego skorzystać z kroku potoku Jenkins - więcej informacji znajdziesz tutaj .
Próbuję użyć Jenkins Pipeline, aby pobrać dane wejściowe od użytkownika, które są przekazywane do zadania jako ciąg JSON. Następnie potok analizuje to za pomocą slurpera i wybieram ważne informacje. Następnie wykorzysta te informacje do wielokrotnego uruchomienia 1 zadania równolegle z różnymi parametrami zadania.
Dopóki nie dodam kodu poniżej, "## Error when below here is added"
skrypt będzie działał poprawnie. Nawet kod poniżej tego punktu będzie działał samodzielnie. Ale po połączeniu otrzymuję poniższy błąd.
Powinienem zauważyć, że wyzwalane zadanie jest wywoływane i działa pomyślnie, ale pojawia się poniższy błąd i kończy się niepowodzeniem głównego zadania. Z tego powodu główne zadanie nie czeka na powrót wyzwolonego zadania. I mogłoby try / catch wokół build job:
jednak chcę Głównym zadaniem czekać na wyzwalane zadania do końca.
Czy ktoś może tu pomóc? Jeśli potrzebujesz więcej informacji, daj mi znać.
Twoje zdrowie
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']]
}
Błąd:
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