Исключение, которое вы видите, связано с безопасностью сценария и изолированной программной средой. По сути, по умолчанию, когда вы запускаете сценарий конвейера, он запускается в песочнице, которая позволяет использовать только определенные методы и классы. Есть способы занести операции в белый список, проверьте ссылку выше.
@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();
Все печатают «Поймано», как и ожидалось.