Wyjątek, który widzisz, wynika z bezpieczeństwa skryptów i piaskownicy. Zasadniczo, domyślnie, gdy uruchamiasz skrypt potoku, działa on w piaskownicy, która pozwala na użycie tylko niektórych metod i klas. Istnieją sposoby na umieszczenie operacji na białej liście, sprawdź powyższy link.
@NonCPS
Adnotacja jest przydatna, gdy masz metody, które używają przedmiotów, które nie są do serializacji. Zwykle wszystkie obiekty, które tworzysz w skrypcie potoku, muszą być serializowane (powodem jest to, że Jenkins musi mieć możliwość serializacji stanu skryptu, aby można go było wstrzymać i przechowywać na dysku).
Kiedy wprowadzisz @NonCPS
metodę, Jenkins wykona całą metodę za jednym razem, bez możliwości wstrzymania. Ponadto nie możesz odwoływać się do żadnych kroków potoku ani metod przekształconych przez CPS z poziomu metody z @NonCPS
adnotacjami. Więcej informacji na ten temat można znaleźć tutaj .
Jeśli chodzi o obsługę wyjątków: Nie jestem w 100% pewien, czego doświadczasz; Wypróbowałem następujące i działa zgodnie z oczekiwaniami:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
i
@NonCPS
def myFunction() {
throw new RuntimeException();
}
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
i w końcu:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
@NonCPS
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
Wszystko drukuje „Złapany” zgodnie z oczekiwaniami.