Es wurde kein passender ClassLoader für den Zugriff gefunden, wenn @GrabConfig verwendet wird

8

Ich versuche, ein globales Funktionsskript zu schreiben, das groovy.sql.SQL verwendet.

Beim Hinzufügen der Annotation @GrabConfig(systemClassLoader=true) erhalte ich eine Ausnahme, wenn ich die globale Funktion in Jenkinsfile verwende.

Hier ist die Ausnahme:

%Vor%

Hier ist mein Code:

%Vor%     
BritishKnight 18.11.2016, 15:56
quelle

2 Antworten

0

Wie hier hier erklärt, sind Pipeline- "Skripte" keine einfachen Groovy-Skripte, sie werden vor dem Ausführen einiger Teile stark transformiert auf Master, einige Teile auf Slaves, mit ihrem Status (Variablenwerte) serialisiert und an den nächsten Schritt übergeben. Daher wird jede Groovy-Funktion nicht unterstützt.

Ich bin mir nicht sicher über @Grab support. Es wird in JENKINS-26192 besprochen (was als aufgelöst erklärt wird, also funktioniert es vielleicht jetzt).

Auszug aus einem sehr interessanten Kommentar :

  

Wenn Sie einige komplexe oder teure Aufgaben mit ausführen müssen   Ohne Groovy, der physisch auf einem Slave läuft, kann es am einfachsten sein   und am effektivsten, diesen Code einfach in eine * .groovy-Datei zu schreiben   Ihren Arbeitsbereich (z. B. in einem SCM-Checkout) und verwenden Sie dann das Tool und   sh / bat, um Groovy als externen Prozess auszuführen; oder sogar dieses Zeug   in ein Gradle-Skript, Groovy Maven Plugin-Ausführung, usw. Der Workflow   Skript selbst sollte auf einfache und extrem leichte beschränkt sein   logische Operationen konzentrieren sich auf die Orchestrierung des Gesamtflusses von   Kontrolle und Interaktion mit anderen Jenkins Features-Slave-Zuweisung,   Benutzereingabe und dergleichen.

Kurz gesagt, wenn Sie das benutzerdefinierte Teil, das SQL benötigt, in ein externes Skript verschieben und dieses in einem separaten Prozess ausführen (der von Ihrem Pipeline-Skript aufgerufen wird), sollte das funktionieren. Dies ist jedoch im Pipelineskript selbst komplizierter.

    
Hugues M. 05.05.2017 23:48
quelle
0

Stellen Sie sicher, dass das Kästchen "Groovy Sandbox verwenden" deaktiviert ist (es befindet sich unterhalb des Textfelds des Pipeline-Skripts).

    
Mark 15.02.2018 14:45
quelle