표시되는 예외는 스크립트 보안 및 샌드 박싱 때문입니다. 기본적으로 파이프 라인 스크립트를 실행하면 특정 메서드와 클래스 만 사용할 수있는 샌드 박스에서 실행됩니다. 작업을 허용 목록에 추가하는 방법이 있습니다. 위 링크를 확인하세요.
@NonCPS
당신이 직렬화 가능하지 않은 객체를 사용하는 방법이있을 때 주석에 유용합니다. 일반적으로 파이프 라인 스크립트에서 생성하는 모든 객체는 직렬화 가능해야합니다 (그 이유는 Jenkins가 스크립트 상태를 직렬화 할 수 있어야 디스크에 일시 중지되고 저장 될 수 있기 때문입니다).
당신이 넣을 때 @NonCPS
방법에, 젠킨스 일시 중지 할 수없이 한 번에 전체 방법을 실행합니다. 또한 @NonCPS
주석이 추가 된 메서드 내에서 파이프 라인 단계 또는 CPS 변환 된 메서드를 참조 할 수 없습니다 . 이에 대한 자세한 내용은 여기에서 찾을 수 있습니다 .
예외 처리에 관해서 : 당신이 경험하고있는 것을 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();
모두 예상대로 "Caught"를 인쇄합니다.