java.lang.StackOverflowError beim Parsen von Groovy-Skripten auf Jenkins

9

Wir haben ein Problem mit unserem Jenkins CI-Server.

Unsere CI-Implementierung basiert auf mehreren Groovy-Skripten, die wir in Jenkins als "System-Groovy-Skripte" ausführen. Dies ist seit Jahren so, und die Skripte haben keine neuen Änderungen erfahren und implementieren Build-Flows, Geschäftslogik-Schritte wie Versionsprüfung, etc.

Gestern haben wir in jedem Jenkins-Job eine Ausnahme gefunden, die wir versucht haben, auf die eine oder andere Weise zu versuchen, Groovy-Skripte auszuführen. Die Ausnahme ist:

%Vor%

Das sieht so aus, als ob der Groovy-Parser in Jenkins die Spitze des Stacks erreicht, während er versucht, das groovige Skript zu analysieren (wie ich schon sagte, begann dies abrupt mit vielen Skripten, die vorher perfekt funktionierten und keiner kürzlichen Modifikation unterzogen wurden) ).

Gegenwärtig läuft unsere Jenkins-Installation (v1.594) auf einem Websphere 8.5.5.2-Anwendungsserver unter AIX v7.1 (weiß nicht genau, auf welchem ​​Fixpack-Level und / oder ob es vor kurzem irgendeine Art von Aktualisierung erfahren hat) versuchen, die Informationen zu sammeln).

Nach einem Neustart kehrten wir zum normalen Verhalten zurück (alle Skripte funktionierten wie gewohnt, ohne sie zu ändern).

Kennt irgendjemand irgendeine Inkompatibilität irgendeiner zugrundeliegenden Bibliothek mit Jenkins Groovy Parsing?

    
Jorge_B 15.04.2015, 10:07
quelle

1 Antwort

1

Es gibt ein Problem mit dem groovigen Code; wodurch der Parser verrückt wird:

%Vor%

Basierend auf einem ähnlichen Ticket: Ссылка , Es ist möglich, dass Ihr Code zirkuläre Referenzen hat. oder zu viele Funktionen im laufenden Betrieb erstellen. Sie können den Ansatz der Analyse Ihres Codes nehmen und versuchen, alles, was Zuweisungen außerhalb von Schleifen macht, zu setzen; insbesondere komplexe Inline-Funktionen.

Ein anderer Ansatz ist, sich das Build Flow-Plug-in anzuschauen und in der Dokumentation nach unten zu scrollen, um zu sehen, wie es geht schreibe einen Erweiterungspunkt, anstatt groovy zu verwenden. Dies ist möglicherweise nicht einfach und erfordert Aufwand. aber Sie können auf diese Weise viele Tests für Ihren Code schreiben. Du würdest immer noch groovy für den Kleber benutzen; aber benutze Java direkt für die Hotspots.

Ein dritter Ansatz wäre, ein Ticket für den Groovy-Issue-Tracker einzureichen; und sehen, was die Experten herausfinden.

    
dnozay 20.12.2015 18:34
quelle

Tags und Links