आप जो अपवाद देख रहे हैं वह script security और सैंडबॉक्सिंग के कारण है। असल में, डिफ़ॉल्ट रूप से, जब आप पाइपलाइन स्क्रिप्ट चलाते हैं, तो यह एक सैंडबॉक्स में चलता है जो केवल कुछ विधियों और वर्गों के उपयोग की अनुमति देता है। श्वेतसूची संचालन के तरीके हैं, उपरोक्त लिंक देखें।
@NonCPS
एनोटेशन उपयोगी है जब आपके पास ऐसी विधियां हैं जो क्रमिक नहीं हैं। आम तौर पर, आपके द्वारा अपनी पाइपलाइन स्क्रिप्ट में बनाए गए सभी ऑब्जेक्ट्स को क्रमबद्ध होना चाहिए (इसका कारण यह है कि जेनकींस स्क्रिप्ट की स्थिति को क्रमबद्ध करने में सक्षम होना चाहिए ताकि इसे डिस्क पर रोका जा सके और संग्रहीत किया जा सके)।
जब आप किसी विधि पर @NonCPS
डालते हैं, तो जेनकिंस पूरी विधि को रोकने की क्षमता के बिना एक ही समय में निष्पादित करेगा। साथ ही, आपको @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();
सभी प्रिंट "पकड़ा" के रूप में उम्मीद।
स्रोत
2017-02-17 16:55:54