Wyjątek, który widzisz, wynika z script security i piaskownicy. Zasadniczo domyślnie, po uruchomieniu skryptu potoku działa on w piaskownicy, która zezwala tylko na użycie pewnych metod i klas. Istnieją sposoby na operacje na białej liście, sprawdź powyższy link.
Adnotacja jest przydatna, gdy istnieją metody wykorzystujące obiekty, które nie mogą być przekształcane do postaci szeregowej. Zwykle wszystkie obiekty tworzone w skrypcie potoku muszą być przekształcalne do postaci szeregowej (powodem tego jest to, że Jenkins musi być w stanie szeregować stan skryptu, aby można go było zatrzymać i zapisać na dysku).
Po umieszczeniu @NonCPS
dla metody, Jenkins wykona całą metodę za jednym razem bez możliwości zatrzymania. Ponadto nie można odwoływać się do żadnych etapów procesu lub metod przekształcania CPS z metody opatrzonej komentarzem w postaci @NonCPS
. More information about this can be found here.
Jeśli chodzi o obsługę wyjątków: Nie jesteś w 100% pewien, czego doświadczasz; Pró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 wreszcie:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
@NonCPS
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
Wszystko print "Caught" zgodnie z oczekiwaniami.