आप जो अपवाद देख रहे हैं, वह स्क्रिप्ट सुरक्षा और सैंडबॉक्सिंग के कारण है । मूल रूप से, डिफ़ॉल्ट रूप से, जब आप एक पाइपलाइन स्क्रिप्ट चलाते हैं, तो यह सैंडबॉक्स में चलता है जो केवल कुछ विधियों और कक्षाओं के उपयोग की अनुमति देता है। श्वेतसूची संचालन के तरीके हैं, ऊपर दिए गए लिंक की जांच करें।
@NonCPS
आप जो वस्तुओं जो serializable नहीं हैं का उपयोग तरीकों जब एनोटेशन उपयोगी है। आम तौर पर, आपके द्वारा अपनी पाइपलाइन स्क्रिप्ट में बनाई जाने वाली सभी वस्तुएँ क्रमबद्ध होनी चाहिए (इसका कारण यह है कि जेनकिंस को स्क्रिप्ट की स्थिति को क्रमबद्ध करने में सक्षम होना चाहिए ताकि इसे रोक दिया जा सके और डिस्क पर संग्रहीत किया जा सके)।
जब आप @NonCPS
एक विधि पर रखते हैं, तो जेनकिन्स विराम देने की क्षमता के बिना एक ही बार में पूरी विधि निष्पादित करेगा। इसके अलावा, आपको किसी @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();
सभी प्रिंट "पकड़ा" उम्मीद के अनुसार।