Mam skrypt potoku w Jenkins.
Kiedyś otrzymywałem ten wyjątek:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: skrypty nie mogą używać metody groovy.json.JsonSlurperClassic parseText java.lang.String
Sprawdziłem wyjątek i znalazłem pewne wskazówki, że powinienem opisać metodę, w której występuje wyjątek @NonCPS
. Zrobiłem to, nie rozumiejąc, co to robi.
Jednak po tym wyjątek, który rzucałem w tej metodzie, nie był już przechwytywany przez try
klauzulę.
Więc jaki jest pomysł @NonCPS
? Jakie są efekty jej stosowania?
Odpowiedzi:
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:
i
i w końcu:
Wszystko drukuje „Złapany” zgodnie z oczekiwaniami.
źródło