एक विशिष्ट जेनकिंस नौकरी के लिए `किलसॉफ्टली` को कैसे सेट करें?


11

मेरे जेनकींस बिल्ड और पोस्ट-बिल्ड चरणों के बीच हैंग का निर्माण करते हैं।

कंसोल आउटपुट से पता चलता है कि 6 मिनट की प्रतीक्षा है (लेकिन मैंने एक घंटे तक प्रतीक्षा की है):

10:53:26 BUILD FAILED in 1m 7s
10:53:26 4 actionable tasks: 4 executed
10:53:26 Build step 'Invoke Gradle script' changed build result to FAILURE
10:53:26 Build step 'Invoke Gradle script' marked build as failure
11:09:29 [CucumberReport] Using Cucumber Reports version 4.9.0

मुझे यह और यह प्रश्न ऐसे ही मुद्दे मिले, और वे कहते हैं कि समाधान में सेटिंग -DSoftKillWaitSeconds=0है jenkins.xml

हालाँकि, मुझे वैश्विक जेनेकिंस सेटिंग्स (मैं अन्य परियोजनाओं के साथ गड़बड़ नहीं करना चाहता) के साथ खिलवाड़ किए बिना केवल विशेष नौकरियों के लिए विकल्प निर्धारित करने का एक तरीका चाहिए।

संपादित करें:

जब मैं [CucumberReport] कदम से पहले मैन्युअल रूप से नौकरी छोड़ देता हूं, तब भी Cucumber रिपोर्ट तैयार की जाती है।

मैंने बिल्ड एबोर्ट को भी चेक किया है यदि बिल्ड बिल्ड विकल्पों में यह चेकबॉक्स अटका हुआ है , तो टाइम-आउट रणनीति No Activity(टाइमआउट सेकंड = 2) के साथ सेट करें ।

जब मैं इन सेटिंग्स के साथ प्रोजेक्ट का निर्माण करता हूं, तो बिल्ड बिल्ड हिस्ट्री में दिखाए गए "एब्रोस्ड के बाद 0 सेकंड" के साथ पहले की तरह विफल हो जाएगा, लेकिन कंसोल आउटपुट समान होगा। (कुछ भी नहीं बदलता है, ककड़ी रिपोर्ट उत्पन्न की जाएगी लेकिन एक निश्चित समय के बाद)।


आप पैरामीटर के साथ क्या हासिल करना चाहते हैं? शायद इसके लिए एक आसान उपाय है।
माइकल केमर्ज़ेल

मैं निर्माण चरण के बाद प्रतीक्षा समय में कटौती करना चाहता हूं। जैसा कि आप कंसोल आउटपुट से देख सकते हैं, बिल्ड और पोस्ट-बिल्ड चरणों के बीच 6 मिनट की प्रतीक्षा है।
मेटे मिसेज

क्या आप अपनी पाइपलाइन के कुछ हिस्से प्रदान कर सकते हैं? मुझे शक है कि जेनकींस बस अटक गया है - यहां कुछ होना है।
माइकल केमर्जेल

क्या आप इस बात पर अधिक विशिष्ट हो सकते हैं कि पाइपलाइन के किन हिस्सों में रुचि होगी, इसलिए मैं कुछ को संपादित और साझा कर सकता हूं क्योंकि मैं वास्तविक कोड साझा करने में असमर्थ हूं?
मेटे मिसेज

क्या आप सिर्फ timeoutअपने पाइप में एक विकल्प सेट नहीं कर सकते ? आपको निश्चित रूप से अपने पाइप का सरलीकृत संस्करण पोस्ट करना चाहिए। यह अनुमान लगाना कठिन है कि क्या गलत हो सकता है। इसके अलावा, यह सवाल शायद devops.stackexchange.com
tftd

जवाबों:


4

इसके लिए एक नौकरी-विशिष्ट मूल्य का चयन करना संभव नहीं हैSoftKillWaitSeconds (मूल्य एक बिंदु पर जेनकींस कोर से लिया गया है जहां नौकरी का नाम ज्ञात नहीं है)।

मेरी सिफारिश है कि आप अपनी नौकरी में गर्भपात से निपटने के लिए खुद को ठीक करें , इसलिए यह "सॉफ्ट किल टाइमआउट" पर निर्भर नहीं करेगा। यदि आप यूनिक्स-ईश प्रणाली पर चल रहे हैं, तो आप एक नए प्रोसेस ग्रुप ( set -mबैश में) और (उदाहरण के लिए) एक उचित निकास जाल की स्थापना करके अपनी नौकरी चला सकते हैं ।


जब से मैं जेनकिन्स के लिए नया हूं, क्या आप "एक नई प्रक्रिया समूह में अपनी नौकरी चलाने (बैश में एम) और (उदाहरण के लिए) एक उचित निकास जाल की स्थापना" पर विस्तार कर सकते हैं?
मेटे

यह जेनकिंस प्रति-से से संबंधित है। आप इस दृष्टिकोण का उपयोग कर सकते हैं यदि आपकी नौकरी में "निष्पादित शेल" बिल्ड चरण शामिल है (या यदि आप इसे बदल सकते हैं तो यह करता है)। फिर एक नई प्रक्रिया समूह बनाने के लिए "सेट-एम" का उपयोग करें, और यहां दिखाए गए जाल का उपयोग करके यह सुनिश्चित करें कि समूह की सभी प्रक्रियाएं मारे जाएंगे।
एलेक्स ओ

3

हम बिल्ड-टाइमआउट प्लगइन का उपयोग कर रहे हैं ताकि समयबद्ध कार्यनीति के साथ No Activityया उससे अटकी हुई नौकरियों को मार सकें Absolute। मेरे लिए, यह एक अच्छा तरीका है जब आप फ्रीस्टाइल परियोजनाओं का उपयोग कर रहे हैं। आपका निर्माण "0 सेकंड के बाद निरस्त" होने का कारण यह है कि सबसे अधिक संभावना है कि अधूरी बाल प्रक्रियाएं हैं। से प्रलेखन :

क्योंकि जावा केवल थ्रेड्स को निर्धारित स्थानों के एक सेट पर बाधित होने की अनुमति देता है, इस आधार पर कि निर्माण कैसे लटका हुआ है, गर्भपात ऑपरेशन प्रभावी नहीं हो सकता है। उदाहरण के लिए,

  • यदि जेनकिंस बच्चे की प्रक्रियाओं को पूरा करने के लिए इंतजार कर रहा है, तो वह तुरंत गर्भपात कर सकता है।
  • यदि जेनकिंस एक अनंत लूप में फंस गया है, तो इसे कभी भी गर्भपात नहीं किया जा सकता है।
  • यदि जेनकिंस जावा वीएम के भीतर एक नेटवर्क या फाइल I / O कर रहा है (जैसे लंबी फाइल कॉपी या SVN अपडेट), तो इसे निरस्त नहीं किया जा सकता है।

आप पूर्ण समयबाह्य रणनीति का प्रयास कर सकते हैं। आप एक वैश्विक चर को परिभाषित कर सकते हैं, ताकि आप नौकरियों में टाइमआउट मूल्य को न दोहराएं:

  1. "मैनेज जेनकींस"> "कॉन्फ़िगर सिस्टम" पर जाएं।
  2. "वैश्विक गुणों" में "पर्यावरण चर" की जाँच करें।
  3. एक पर्यावरण चर नाम जोड़ें = "GLOBAL_TIMEOUT_MINUTES" मान = "20"।
  4. किसी प्रोजेक्ट के कॉन्फ़िगरेशन पृष्ठ पर जाएं।
  5. "बिल्ड एनवायरनमेंट को रोकें" यदि "बिल्ड एनवायरनमेंट" को चेक करें।
  6. "टाइम-आउट रणनीति" के लिए "पूर्ण" चुनें। बेशक, अन्य रणनीतियों के लिए भी लागू होता है।
  7. "टाइमआउट" के लिए "$ {GLOBAL_TIMEOUT_MINUTES}" सेट करें।
  8. टाइमआउट कार्रवाई "बिल्ड को निरस्त करें" सेट करें।

यदि यह काम नहीं कर रहा है, तो आप लॉग में देखने का प्रयास कर सकते हैं https: // your-jenkins-server / log या थ्रेड डंप में।
फांसी एक प्लगइन के नए / पुराने संस्करण के कारण हो सकता है। खोजने की कोशिश करें कि अपूर्ण बाल प्रक्रियाएं क्या हैं। समस्या का कारण बनने वाले को खोजने के लिए एक-एक करके पोस्ट-बिल्ड एक्शन को अक्षम करने का प्रयास करें। आप /superuser/1401879/debugging-what-happens-when-a-jenkins-build-unexpectedly-pauses-or-hangs देख सकते हैं


हालांकि, उपयोगी जानकारी के लिए बनाया गया, मेरी समस्या का समाधान नहीं करता है। मैंने पहले से ही टाइमआउट प्लगइन बनाने की कोशिश की लेकिन कोई सफलता नहीं मिली।
मेटे मिसेज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.