rozwiązać: Dzięki below answer od S.Richmond. Musiałem zdezaktywować zapisane mapy typu typu groovy.json.internal.LazyMap
, co oznaczało usunięcie po użyciu zmiennych envServers
i.Jenkins Pipeline NotSerializableException: groovy.json.internal.LazyMap
Dodatkowe: Osoby poszukujące tego błędu może być zainteresowany w użyciu krok rurociągu Jenkins readJSON
zamiast - znaleźć więcej informacji here.
Próbuję użyć Jenkins Pipeline do pobrania danych wejściowych od użytkownika, który jest przekazywany do zadania jako ciąg znaków json. Pipeline następnie analizuje to za pomocą slurpera i wybieram ważne informacje. Następnie użyje tych informacji, aby wielokrotnie uruchamiać 1 zadanie równolegle z różnymi parametrami zadania.
Do czasu dodania kodu poniżej "## Error when below here is added"
skrypt będzie działał poprawnie. Nawet kod pod tym punktem będzie działał sam. Ale po połączeniu otrzymuję poniższy błąd.
Należy zauważyć, że wyzwalane zadanie jest wywoływane i działa poprawnie, ale występuje poniżej błąd i zawiedzie główne zadanie. Z tego powodu główne zadanie nie czeka na powrót wyzwalanej pracy. I Mogę próbować/złapać wokół build job:
jednak chcę, aby główne zadanie czekać na zakończenie wyzwalanego zadania.
Czy ktoś może pomóc tutaj? Jeśli potrzebujesz więcej informacji, daj mi znać.
Cheers
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 [email protected]
Właśnie wpadł ten sam. Czy zrobiłeś jeszcze jakieś postępy? –
https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md#serializing-local-variables –