Ngoại lệ bạn thấy là do script security và hộp cát. Về cơ bản, theo mặc định, khi bạn chạy tập lệnh đường ống, nó chạy trong hộp cát chỉ cho phép sử dụng các phương thức và lớp nhất định. Có nhiều cách để đưa vào danh sách trắng, kiểm tra liên kết ở trên.
Chú thích @NonCPS
hữu ích khi bạn có phương pháp sử dụng các đối tượng không thể tuần tự hóa được. Thông thường, tất cả các đối tượng mà bạn tạo trong kịch bản đường dẫn phải được tuần tự hóa (lý do cho điều này là Jenkins phải có khả năng tuần tự hóa trạng thái của tập lệnh để nó có thể bị tạm dừng và lưu trữ trên đĩa).
Khi bạn đặt @NonCPS
trên phương thức, Jenkins sẽ thực thi toàn bộ phương pháp trong một lần mà không có khả năng tạm dừng. Ngoài ra, bạn không được phép tham chiếu bất kỳ bước đường ống nào hoặc phương pháp đã chuyển đổi CPS từ trong phương thức được chú thích @NonCPS
. More information about this can be found here.
Đối với việc xử lý ngoại lệ: Không chắc chắn 100% những gì bạn đang gặp phải; Tôi đã thử những điều sau đây và nó hoạt động như mong đợi:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
và
@NonCPS
def myFunction() {
throw new RuntimeException();
}
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
và cuối cùng là:
@NonCPS
def myFunction() {
throw new RuntimeException();
}
@NonCPS
def mySecondFunction() {
try {
myFunction();
} catch (Exception e) {
echo "Caught";
}
}
mySecondFunction();
Tất cả print "Caught" như mong đợi.
Nguồn
2017-02-17 16:55:54