Исключение, которое вы видите, связано с script security и песочницей. По сути, по умолчанию, когда вы запускаете сценарий конвейера, он запускается в песочнице, которая позволяет использовать только определенные методы и классы. Есть способы для операций с белыми списками, проверьте ссылку выше.
Аннотации @NonCPS
полезны, если у вас есть методы, которые используют объекты, которые не могут быть сериализованы. Как правило, все объекты, которые вы создаете в сценарии вашего конвейера, должны быть сериализуемыми (причина этого в том, что Jenkins должен иметь возможность сериализовать состояние сценария, чтобы его можно было приостановить и сохранить на диске).
Когда вы положите @NonCPS
по методу, Дженкинс выполнит весь метод за один раз без возможности паузы. Кроме того, вам не разрешено ссылаться на любые шаги трубопровода или методы, преобразованные CPS, из аннотированного метода @NonCPS
. More information about this can be found here.
Что касается обработки исключений: не 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();
Все печати "Пойманный", как и ожидалось.