Ответ 1
Исключение, которое вы видите, связано с script безопасностью и песочницей. В принципе, по умолчанию при запуске конвейера script он запускается в песочнице, которая позволяет использовать только определенные методы и классы. Есть способы для операций с белыми списками, проверьте ссылку выше.
Аннотация @NonCPS
полезна, когда у вас есть методы, которые используют объекты, которые не могут быть сериализованы. Как правило, все объекты, которые вы создаете в конвейере script, должны быть сериализуемыми (причина этого в том, что Дженкинс должен иметь возможность сериализовать состояние script, чтобы его можно было приостановить и сохранить на диске).
Когда вы ставите @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();
Вся печать "Поймано", как ожидалось.