Die Ausnahme, die Sie sehen, ist auf die Skriptsicherheit und das Sandboxing zurückzuführen. Wenn Sie ein Pipeline-Skript ausführen, wird es standardmäßig in einer Sandbox ausgeführt, in der nur bestimmte Methoden und Klassen verwendet werden können. Es gibt Möglichkeiten, Vorgänge auf die Whitelist zu setzen. Überprüfen Sie den obigen Link.
Die @NonCPS
Anmerkung ist nützlich, wenn Sie Methoden haben, die Objekte verwenden, die nicht serialisierbar sind. Normalerweise müssen alle Objekte, die Sie in Ihrem Pipeline-Skript erstellen, serialisierbar sein (der Grund dafür ist, dass Jenkins den Status des Skripts serialisieren kann, damit es angehalten und auf der Festplatte gespeichert werden kann).
Wenn Sie @NonCPS
eine Methode anwenden, führt Jenkins die gesamte Methode auf einmal aus, ohne pausieren zu können. Außerdem dürfen Sie innerhalb einer mit @NonCPS
Anmerkungen versehenen Methode keine Pipeline-Schritte oder CPS-transformierten Methoden referenzieren . Weitere Informationen hierzu finden Sie hier .
Was die Ausnahmebehandlung betrifft: Nicht 100% sicher, was Sie erleben; Ich habe Folgendes versucht und es funktioniert wie erwartet:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
und
@NonCPS
def myFunction() {
throw new RuntimeException();
}
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
und schlussendlich:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
@NonCPS
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
Alle drucken "Gefangen" wie erwartet.