जब आप एक नि: शुल्क शैली परियोजना का उपयोग कर रहे हैं, तो आप यह निर्धारित कर सकते हैं कि 20 मिनट के बाद निर्माण समाप्त नहीं हुआ है। जेनकींस मल्टी ब्रांच पाइपलाइन प्रोजेक्ट के साथ यह कैसे संभव है?
जवाबों:
आप टाइमआउट चरण का उपयोग कर सकते हैं :
timeout(20) {
node {
sh 'foo'
}
}
यदि आपको MINUTESTimeUnit
से भिन्न की आवश्यकता है , तो आप तर्क की आपूर्ति कर सकते हैं :unit
timeout(time: 20, unit: 'SECONDS') {
EDIT अगस्त 2018: आजकल अधिक सामान्य घोषणात्मक पाइपलाइनों (आसानी से शीर्ष स्तर के pipeline
निर्माण द्वारा मान्यता प्राप्त ) के साथ, options
विभिन्न स्तरों (प्रति समग्र पाइपलाइन या प्रति चरण) का उपयोग करके टाइमआउट भी निर्दिष्ट किया जा सकता है :
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
फिर भी, यदि आप एक घोषणात्मक पाइपलाइन में एक ही चरण के लिए समय-सीमा लागू करना चाहते हैं, तो इसका उपयोग ऊपर वर्णित के रूप में किया जा सकता है।
def n=Jenkins.instance.getNode("ETService3") if (n!=null && n.computer && n.computer.online) { echo "Online" } else { echo "Offline" // wait a little bit and try again }
नोड को दो बार हासिल करने के लिए एक मुश्किल तरीका है। बाहरी टाइमआउट के साथ पहली बार, आंतरिक टाइमआउट के साथ दूसरी। मुझे सुविधा भी याद आ रही है।
एक घोषणा पाइपलाइन के लिए विकल्प-अनुभाग में टाइमआउट चरण का उपयोग करने की सलाह दी जाती है ।
निर्धारित समय सीमा के साथ ब्लॉक के अंदर कोड निष्पादित करता है। यदि समय सीमा पूरी हो जाती है, तो एक अपवाद (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException) फेंक दिया जाता है, जो बिल्ड को निरस्त करने की ओर जाता है (जब तक कि इसे पकड़ा नहीं जाता है और किसी तरह संसाधित किया जाता है)। यूनिट वैकल्पिक है लेकिन मिनटों के लिए चूक है।
टाइमआउट-चरण में 3 पैरामीटर हैं जिन्हें आप कॉन्फ़िगर कर सकते हैं:
समय (आवश्यक, इंट)
गतिविधि (वैकल्पिक, बूलियन)
इकाई (वैकल्पिक, मान: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS)
उदाहरण:
timeout(time: 10) // would lead to a timeout of 10 minutes (MINUTES is default value)
timeout(time: 10, unit: 'SECONDS') // a 10 seconds timeout
timeout(time: 10, activity: false, unit: 'MILLISECONDS')
आधिकारिक जेनकींस प्रलेखन एक टाइमआउट के उपयोग के लिए एक बहुत अच्छा उदाहरण है:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
डिफ़ॉल्ट रूप में गलत है। जब activity
गलत है - पूरी नौकरी के लिए true
टाइमआउट, गतिविधि के लिए टाइमआउट (लॉग में कुछ भी प्रिंट करने के लिए)।
timeout
एक विशेष चरण के लिए इस तरह से जोड़ना चाहता हूं कि बाद के चरण को इनायत से चलना चाहिए। उपरोक्त उदाहरण में, पाइपलाइन को समय समाप्त होने के बाद छोड़ दिया जाता है और बाद के चरणों को निष्पादित नहीं किया जाता है। क्या मेरी आवश्यकता को पूरा करने का कोई तरीका है? किसी दिए गए चरण के टाइमआउट के लिए नमूना कोड (आधिकारिक जेनकिंस डॉक्टर से):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ चरण संदर्भ ।