Виняток, який ви бачите, пов’язаний із безпекою сценарію та пісочницею. В основному, за замовчуванням, коли ви запускаєте конвеєр конвеєра, він працює в пісочній скриньці, яка дозволяє використовувати лише певні методи та класи. Існують способи білого списку операцій, перевірте посилання вище.
@NonCPS
Анотацію корисно , коли у вас є методи , які використовують об'єкти , які не є сериализации. Зазвичай всі об'єкти, які ви створюєте в сценарії конвеєра, повинні бути серіалізаційними (причина цього полягає в тому, що Дженкінс повинен мати можливість серіалізувати стан сценарію, щоб його можна було призупинити і зберігати на диску).
Коли ви @NonCPS
застосуєте метод, Дженкінс виконає весь метод за один раз без можливості зробити паузу. Крім того, вам не дозволяється посилатися на будь-які етапи трубопроводу або методи, трансформовані CPS, з @NonCPS
методу, що коментується. Більше інформації про це можна знайти тут .
Що стосується поводження з винятками: не на 100% впевнений, що ви відчуваєте; Я спробував наступне, і він працює як слід:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
і
@NonCPS
def myFunction() {
throw new RuntimeException();
}
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
і, нарешті:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
@NonCPS
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
Весь друк "Зловив" як очікувалося.