सर्वर को पुनरारंभ किए बिना जेनकींस पर एक बिना रुके ज़ोंबी जॉब कैसे रोकें?


178

हमारे जेनकिंस सर्वर में एक नौकरी है जो तीन दिनों से चल रही है, लेकिन कुछ भी नहीं कर रही है। कोने में छोटे X पर क्लिक करने से कुछ नहीं होता है, और कंसोल आउटपुट लॉग कुछ भी नहीं दिखाता है। मैंने अपने बिल्ड सर्वर पर जाँच की है और वास्तव में नौकरी बिल्कुल नहीं चल रही है।

क्या किसी फ़ाइल या लॉक या किसी चीज़ को संपादित करके जेंकिंस को बताने का एक तरीका है कि काम "किया गया" है? चूंकि हमारे पास बहुत सारी नौकरियां हैं, हम वास्तव में सर्वर को पुनरारंभ नहीं करना चाहते हैं।


1
जेनकिंस के हाल के संस्करणों के साथ लगता है कि समाधान को स्वीकार किए गए के रूप में चिह्नित नहीं किया गया है। (लेकिन '16 से एक)
निकोलस

जवाबों:


213

फांसी के धागे को बाधित करने के लिए अपने सर्वर पर स्क्रिप्ट चलाने के लिए "जेनकींस प्रबंधित करें" "स्क्रिप्ट कंसोल" पर जाएं।

आप सभी जीवित धागे प्राप्त कर सकते हैं Thread.getAllStackTraces()और जो लटका हुआ है उसे बीच में रोक सकते हैं।

Thread.getAllStackTraces().keySet().each() {
  t -> if (t.getName()=="YOUR THREAD NAME" ) {   t.interrupt();  }
}

अपडेट करें:

थ्रेड्स का उपयोग करने वाला उपरोक्त समाधान अधिक हाल के जेनकिंस संस्करणों पर काम नहीं कर सकता है। जमे हुए पाइपलाइनों को बाधित करने के लिए इस समाधान ( अलेक्जेंड्रू-बैंटिच द्वारा ) के बजाय देखें और चलाएं:

Jenkins.instance.getItemByFullName("JobName")
                .getBuildByNumber(JobNumber)
                .finish(
                        hudson.model.Result.ABORTED,
                        new java.io.IOException("Aborting build")
                );

48
बढ़िया काम किया! पढ़ने वाले किसी भी व्यक्ति के लिए, आप उपरोक्त विधि से सबसे पहले थ्रेड नाम देख सकते हैं, कॉलिंग विधि के साथt -> println(t.getName());
फिल

2
अभी भी इसके ऊपर की स्क्रिप्ट के साथ काम नहीं कर रहा है, इसकी स्क्रिप्ट मिल रही है, लेकिन एक ही नहीं मार रहा है।
राघव एस

2
क्या आप नाम से मिलान करने के बाद विशिष्ट थ्रेड का नाम प्रिंट करने में सक्षम हैं t.getName()=="SOME NAME"?
ज़हरा

3
यह मेरी मदद नहीं करता है - थ्रेड इंटरप्ट () पर प्रतिक्रिया नहीं करता है।
ज़िट्रैक्स

2
मेरे लिए व्यवधान पर्याप्त नहीं था, मुझे t.stopइसके बजाय कॉल करने की आवश्यकता थी :Thread.getAllStackTraces().keySet().each() { t -> if (t.getName()=="YOUR THREAD NAME" ) { println(“Found, stopping now… “); t.stop(); } }
शुक्रवार

258

मुझे भी यही समस्या थी और इसे जेनकिंस कंसोल के माध्यम से ठीक किया।

"जेनकींस प्रबंधित करें"> "स्क्रिप्ट कंसोल" पर जाएं और एक स्क्रिप्ट चलाएं:

 Jenkins .instance.getItemByFullName("JobName")
        .getBuildByNumber(JobNumber)
        .finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build")); 

आपने बस अपना नाम और नौकरी का नाम निर्दिष्ट किया होगा।


मैं एक पाइपलाइन नौकरी के साथ यह था जो अन्य नौकरियों की शुरुआत की। सर्वर क्रैश हो गया, अन्य नौकरियां चली गईं, लेकिन पाइपलाइन नौकरी अभी भी एक ज़ोंबी थी। मैंने पहली बार स्वीकार किए गए उत्तर की कोशिश की, कोई फायदा नहीं हुआ। मुझे कई बार @ अलेक्जेंड्रू की कमान चलानी पड़ी, हर बार जब मैंने पाइपलाइन की नौकरी की प्रगति पट्टी को थोड़ा सा देखा। अंत में पाइपलाइन की नौकरी चली गई और अच्छे उपायों के लिए मैंने इसे भी हटा दिया।
एमी वैन गैससे

18
यह मल्टी-ब्रांच प्रोजेक्ट्स के लिए भी बढ़िया काम करता है, लेकिन जॉबनाम को Jenkins.instance.getItemByFullName ("<प्रोजेक्ट-नेम> / <ब्रांच-नेम>") के रूप में निर्दिष्ट करने के लिए महत्वपूर्ण है
18

22
इस जवाब ने मेरी समस्या को हल करने में मदद की। पाइपलाइन कुल लाश थी। उपरोक्त स्क्रिप्ट ने काम नहीं किया है और कुछ जेनकींस के पुनरारंभ होने के बाद भी पाइपलाइन चल रही थी। मैंने कुछ आंतरिक श्रेणी के दस्तावेज़ पढ़े और एक विलोपन () विधि प्राप्त की ताकि मेरी स्क्रिप्ट इस तरह दिखे: Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();इसे क्रियान्वित करने के बाद और एक अन्य जेनकींस को फिर से शुरू करें ज़ोंबी बिल्ड अंततः चला गया था।
सिजमन सादेलो

5
finishAbstractBuild में कोई विधि नहीं है और न ही FreeSyleBuild और न ही MavenModulesetBuild
Jakub Bochenski

3
मुझे इस स्क्रिप्ट को निष्पादित करते समय कोई मुद्दा मिला, कोई विचार? groovy.lang.MissingMethodException: No signature of method: hudson.model.FreeStyleBuild.finish() is applicable for argument types: (hudson.model.Result, java.io.IOException) values: [ABORTED, java.io.IOException: Aborting build] Possible solutions: find(), findAll(), find(groovy.lang.Closure) at
टीएन डंग ट्रान

31

यदि आपको मल्टीब्रांच पाइपलाइन -जॉब मिला है (और आप जेनकिंस-एडमिन हैं), तो इस स्क्रिप्ट को जेनकिंस स्क्रिप्ट कंसोल में उपयोग करें:

Jenkins.instance
.getItemByFullName("<JOB NAME>")
.getBranch("<BRANCH NAME>")
.getBuildByNumber(<BUILD NUMBER>)
.finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));

से https://issues.jenkins-ci.org/browse/JENKINS-43020

यदि आप सुनिश्चित नहीं हैं कि नौकरी का पूरा नाम (पथ) क्या है, तो आप सभी वस्तुओं का पूरा नाम सूचीबद्ध करने के लिए निम्नलिखित स्निपेट का उपयोग कर सकते हैं:

  Jenkins.instance.getAllItems(AbstractItem.class).each {
    println(it.fullName)
  };

से https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs


इस पर ध्यान दें: यदि आप SVN का उपयोग कर रहे हैं (और आप मानक सम्मेलनों का पालन करते हैं), तो आपका <BRANCH NAME> कुछ शाखाओं
tvt173

25

मैं इस कार्य के लिए मॉनिटरिंग प्लगइन का उपयोग करता हूं । प्लगइन की स्थापना के बाद

  1. प्रबंधित करने के लिए जाओ जेनकींस> हडसन / जेनकिंस मास्टर की निगरानी
  2. थ्रेड्स के विवरण का विस्तार करें, दाईं ओर छोटा नीला लिंक
  3. नौकरी का नाम खोजें जो लटका हुआ है

    थ्रेड का नाम इस तरह शुरू होगा

    Executor #2 for master : executing <your-job-name> #<build-number>

  4. अपनी इच्छित नौकरी की पंक्ति के दाईं ओर लाल, गोल बटन पर क्लिक करें


3
इसे मार डाला गया है, लेकिन फिर जब हम पृष्ठ को ताज़ा करते हैं तो धागा जीवित लगता है
राघव एस

दिलचस्प। इस पर मेरी नजर रहेगी। संभवतः यह निर्माण पर निर्भर करता है। यदि आपने ANT या मावेन एक्सटेंशन द्वारा बाहरी प्रक्रियाएँ शुरू की हैं, तो यह विफल हो सकता है।
15'15 को

यह वह उपाय है जो मेरे लिए काम करता है। बस धागे की सूची में मिला, नौकरी के नाम की खोज की और लाल बटन पर क्लिक किया। jenkinsServer / निगरानी # सूत्र
गिल्बर्टो

24

एक बार मैंने एक निर्माण का सामना किया, जिसे "स्क्रिप्ट कंसोल" द्वारा रोका नहीं जा सकता था। अंत में मैंने इन चरणों के साथ समस्या हल की:

ssh onto the jenkins server
cd to .jenkins/jobs/<job-name>/builds/
rm -rf <build-number>
restart jenkins

वास्तव में मेरे मामले में मदद मिली: यह काम कंसोल के माध्यम से इसे मारने के समय अब ​​मौजूद नहीं था (डायनेमिक पाइपलाइन नौकरी, सुविधा शाखा हटा दी गई)
mkko

24

पहला प्रस्तावित समाधान बहुत करीब है। यदि आप रुकावट () ​​के बजाय स्टॉप () का उपयोग करते हैं, तो यह रनवे थ्रेड्स को भी मारता है, जो एक ग्रूवी सिस्टम स्क्रिप्ट में अंतहीन रूप से चलता है। यह किसी भी निर्माण को मार देगा, जो नौकरी के लिए चलता है। यहाँ कोड है:

Thread.getAllStackTraces().keySet().each() {
    if (it.name.contains('YOUR JOBNAME')) {  
      println "Stopping $it.name"
      it.stop()
    }
}

4
IMO जो स्वीकृत उत्तर होना चाहिए। अन्य सभी उत्तर मेरे लिए काम नहीं करते थे, क्योंकि निर्माण पहले से ही एक बाधित स्थिति में था, लेकिन वह कुछ पोस्ट बिल्ड चरण में लटका हुआ था। केवल इस समाधान ने वास्तव में बिल्ड को रोक दिया
कुटज़ी

1
containsयहाँ उपयोग करना गलत और खतरनाक है - यदि आपकी नौकरी का नाम "रन टेस्ट" है, तो यह "रन टेस्ट - इंटीग्रेशन", "रन टेस्ट - यूनिट" नामक किसी भी नौकरी को भी मार देगा, इसका उपयोग करने वाले किसी भी व्यक्ति को सावधान रहने की आवश्यकता नहीं है। अप्रत्याशित रूप से असंबंधित नौकरियों को समाप्त करें
ब्रैंडन

13

यदि आपके पास एक अनस्टॉपेबल पाइपलाइन नौकरी है, तो निम्नलिखित प्रयास करें:

  1. बिल्ड प्रगति बार के आगे लाल X पर क्लिक करके कार्य को रद्द करें
  2. निर्माण को रोकने के लिए "रोकें / फिर से शुरू करें" पर क्लिक करें
  3. बिल्ड को फिर से शुरू करने के लिए "पॉज / रिज्यूमे" पर फिर से क्लिक करें

पॉज़ / रिज्यूम पाइपलाइन का काम

जेनकिंस को एहसास होगा कि नौकरी को समाप्त कर दिया जाना चाहिए और निर्माण को रोकना चाहिए


8
मेरे पास यह मेनू आइटम नहीं है।
पपीतातिस

13

स्क्रिप्ट कंसोल या अतिरिक्त प्लगइन्स का उपयोग किए बिना, आप बस कर सकते हैं निर्माण बीच में बंद करें दर्ज करके /stop, /termया /killआपके ब्राउज़र में निर्माण यूआरएल के बाद।

उपरोक्त लिंक से शब्दशः उद्धृत करना:

किसी पाइपलाइन के URL एंडपॉइंट के लिए HTTP POST अनुरोध भेजकर पाइपलाइन की नौकरियों को रोका जा सकता है।

  • <BUILD ID URL> / stop - एक पाइपलाइन को निरस्त करता है।
  • <BUDD ID URL> / अवधि - एक निर्माण को जबरन समाप्त करता है (केवल तभी उपयोग किया जाना चाहिए जब स्टॉप काम नहीं करता है।
  • <BUILD ID URL> / मार - हार्ड एक पाइपलाइन को मार डालो। यह एक पाइपलाइन को रोकने का सबसे विनाशकारी तरीका है और इसे केवल अंतिम उपाय के रूप में इस्तेमाल किया जाना चाहिए।

7

बिल्ड-टाइमआउट प्लगइन ऐसे मामलों के लिए काम आ सकता है। यदि यह बहुत लंबा समय लेगा तो यह स्वचालित रूप से नौकरी को मार देगा।


1
दुर्भाग्य से यह हमारे लिए एक विकल्प नहीं है, क्योंकि हमारे पास कुछ नौकरियां हैं जो दिन के लिए चलने वाली हैं (पूछें नहीं)
blokkie

7
आप प्रति कार्य के आधार पर बिल्डआउट कॉन्फ़िगर करते हैं।
ड्रेको ऐटर

1
नहीं, हमारे पास एक बिल्ड है जो 3 घंटे से अधिक समय के लिए टाइमआउट के साथ 95 मिनट के लिए सेट है, मुझे नहीं लगता कि टाइमआउट प्लगइन मदद कर सकता है क्योंकि यह मैन्युअल रूप से "एबोर्ट" पर क्लिक करने के समान है
जैकब बोचेंस्की

7

मुझे लगता है कि उत्तर देने में बहुत देर हो गई है लेकिन मेरी मदद कुछ लोगों ने की है।

  1. मॉनिटरिंग प्लगइन स्थापित करें। ( http://wiki.jenkins-ci.org/display/JENKINS/Monitoring )
  2. JenkinsUrl / निगरानी / नोड्स पर जाएं
  3. सबसे नीचे थ्रेड्स सेक्शन में जाएं
  4. मास्टर के बाईं ओर विवरण बटन पर क्लिक करें
  5. उपयोगकर्ता समय (एमएस) के आधार पर छाँटें
  6. फिर थ्रेड का नाम देखें, आपके पास बिल्ड का नाम और नंबर होगा
  7. इसे मार

मेरे पास खेद पोस्ट करने के लिए पर्याप्त प्रतिष्ठा नहीं है।

आशा है कि यह मदद कर सकता है


1
मदद नहीं, यह कहते हैं कि मारे गए। लेकिन फिर से जब पृष्ठ पुनः लोड होता है तो मैं उस धागे को देख पा रहा हूँ
राघव एस

क्या आप बिल्ड के धागे को मारते हैं या बिल्ड के उप-थ्रेड को मारते हैं? इस धागे का नाम क्या है? मुझे लगता है कि आप अच्छे को नहीं मारेंगे। यदि आप बिल्ड के धागे को मारते हैं, तो आप बिल्ड को सफलतापूर्वक समाप्त होते देखेंगे।
साइमन

2
मैंने थ्रेड को मारने की कोशिश की, जो कि दास की निष्पादक संख्या के साथ जुड़ा हुआ है, जिसका काम नाम भी था। इसके अलावा, मुझे GET को संभालने से जुड़े कई अन्य सूत्र मिले और इसमें शामिल जानकारी तोड़फोड़ के संबंध में थी। दोनों को मारने से भी कोई फायदा नहीं हुआ। अंत में पुनरारंभ ने मेरी मदद की। एक और अवलोकन था, एसवीएन एसोसिएशन के बिना अन्य सूत्र हत्या योग्य थे।
राघव एस

यह उत्तर @cheffe उत्तर की एक प्रति है, जिसे एक महीने पहले पोस्ट किया गया था।
t0r0X

6

शीर्ष जवाब एक विशेष रूप से खराब समय पर जेनकींस पुनः आरंभ करने की वजह से मैं ज़ोंबी नौकरियों की एक बहुत बड़ी संख्या (~ 100) थी, इसलिए मैन्युअल काम नाम और प्रत्येक के बिल्ड नंबर और खोजने: लगभग मेरे लिए काम किया, लेकिन मैं एक प्रमुख समस्या थी हर जॉब जॉब और फिर उन्हें मैन्युअल रूप से मारना संभव नहीं था। यहां बताया गया है कि मैंने जॉब जॉब्स को कैसे स्वचालित रूप से पाया और मार दिया:

Jenkins.instance.getItemByFullName(multibranchPipelineProjectName).getItems().each { repository->
  repository.getItems().each { branch->
    branch.builds.each { build->
      if (build.getResult().equals(null)) {
        build.doKill()
      }
    }
  }
}

यह स्क्रिप्ट सभी नौकरियों के सभी बिल्ड पर लूप करती है getResult().equals(null)और यह निर्धारित करने के लिए उपयोग करती है कि नौकरी समाप्त हो गई है या नहीं। एक निर्माण कतार में है, लेकिन अभी तक नहीं शुरू कर दिया अधिक दोहराया नहीं जाएगा (के बाद से है कि निर्माण में नहीं होगा कि job.builds), और एक निर्माण कि पहले से ही समाप्त हो के अलावा कुछ वापस आ जाएगी nullके लिए build.getResult()। वैध रूप से चलने वाली नौकरी का निर्माण परिणाम भी होगाnull , इसलिए सुनिश्चित करें कि आपके पास कोई ऐसी नौकरी नहीं है जिसे आप इसे चलाने से पहले नहीं मारना चाहते हैं।

मल्टीफ़्रेन्च पाइपलाइन परियोजना में प्रत्येक भंडार के लिए प्रत्येक शाखा / पीआर की खोज करने के लिए मुख्य रूप से कई नेस्टेड लूप आवश्यक हैं; यदि आप मल्टीब्रांच पाइपलाइनों का उपयोग नहीं कर रहे हैं, तो आप सीधे अपनी सभी नौकरियों पर कुछ ऐसा कर सकते हैं Jenkins.instance.getItems().each


3
मैंने आपकी स्क्रिप्ट में थोड़ा सुधार किया। runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) } runningBuilds.each { branch->branch.doKill() }
तोबी

5

मैंने जेनकिन्स स्रोत को देखा है और ऐसा प्रतीत होता है कि मैं जो करने की कोशिश कर रहा हूं वह असंभव है, क्योंकि किसी कार्य को रोकना थ्रेड इंटरप्ट के माध्यम से किया जाना प्रतीत होता है। मुझे पता नहीं क्यों नौकरी लटका हुआ है ..

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

अजेय नौकरियों के संभावित कारण:

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

यह वास्तव में असंभव नहीं है। आप अपने काम को चलाने वाले धागे को बाधित करने के लिए जेनकिंस स्क्रिप्ट कंसोल का उपयोग कर सकते हैं। यहां देखें स्पष्टीकरण: stackoverflow.com/a/26306081/1434041
ज़हरा

3

मैं आमतौर पर ऐसे मामलों में जेनकिंस-क्ली का उपयोग करता हूं। आप जार को एक पृष्ठ से डाउनलोड कर सकते हैं http://your-jenkins-host:PORT/cli। फिर भागो

java -jar jenkins-cli.jar delete-builds name_of_job_to_delete hanging_job_number

सहायक जानकारी:

आप कई तरह के बिल्ड भी पास कर सकते हैं 350:400। सामान्य सहायता उपलब्ध चल रही है

java -jar jenkins-cli.jar help

के लिए प्रसंग आदेश मदद delete-buildsसे

java -jar jenkins-cli.jar delete-builds

3

अलेक्जेंड्रू बैंटिच के जवाब ने मुझे निर्माण को रोकने के लिए अच्छी तरह से काम किया, लेकिन मेरे निष्पादक अभी भी व्यस्त दिख रहे थे। मैं निम्नलिखित का उपयोग करते हुए व्यस्त निष्पादनकर्ता स्थिति को स्पष्ट करने में सक्षम था

server_name_pattern = /your-servers-[1-5]/
jenkins.model.Jenkins.instance.getComputers().each { computer ->
  if (computer.getName().find(server_name_pattern)) {
    println computer.getName()
    execList = computer.getExecutors()      
    for( exec in execList ) {
      busyState = exec.isBusy() ? ' busy' : ' idle'
      println '--' + exec.getDisplayName() + busyState
      if (exec.isBusy()) {
        exec.interrupt()
      }
    }
  }
}

3

यह एक ही मुद्दा था, लेकिन स्टैक धागा नहीं था। हमने जेनकिंस कंसोल में इस स्निपेट का उपयोग करके नौकरी को हटा दिया। नौकरी का नाम बदलें और आप के साथ dnumber बनाएँ।

def jobname = "Main/FolderName/BuildDefinition"
def buildnum = 6
Jenkins.instance.getItemByFullName(jobname).getBuildByNumber(buildnum).delete(); 

1
यह काम नहीं करता! यह केवल चलने की प्रक्रिया को छोड़कर निर्माण से हटा
जैकब बोचेंस्की

3

हाल ही में मुझे एक नोड / एजेंट के रूप में पता चला, जिसके पास एक पाइप लाइन की नौकरी के निर्माण "एक्स" द्वारा दिनों के लिए एक निष्पादक था, हालांकि उस नौकरी पृष्ठ ने दावा किया था कि "एक्स" अब मौजूद नहीं था (10 बाद के बिल्ड (!) के बाद छोड़ दिया गया) पाइपलाइन कार्य में कॉन्फ़िगर किया गया)। सत्यापित है कि डिस्क पर: बिल्ड "एक्स" वास्तव में चला गया था।

समाधान: यह एजेंट / नोड था जिसने गलत तरीके से सूचना दी थी कि कब्जा किया गया निष्पादक "एक्स" बनाने में व्यस्त था। उस निष्पादक के थ्रेड को बाधित करते हुए तुरंत जारी कर दिया।

def executor = Jenkins.instance.getNode('NODENAME').computer.executors.find {
    it.isBusy() && it.name.contains('JOBNAME')
}

println executor?.name
if (executor?.isBusy()) executor.interrupt()

अन्य जवाब पर विचार:

  • @Cheffe से जवाब: काम नहीं किया (अगला बिंदु देखें, और नीचे अपडेट करें)।
  • के साथ जवाब Thread.getAllStackTraces() : कोई मिलान धागा।
  • @ Levente-holló से जवाब और सभी के साथ जवाब getBuildByNumber() : लागू नहीं हुआ क्योंकि निर्माण वास्तव में अब नहीं था!
  • @Austinfromboston से जवाब: जो मेरी जरूरतों के करीब आया, लेकिन इसने इस समय चल रहे किसी भी अन्य निर्माण को भी रोक दिया होगा।

अद्यतन:
मैंने फिर से एक ऐसी ही स्थिति का अनुभव किया, जहां एक एक्ज़ेक्यूटर पर (अभी भी मौजूदा) समाप्त पाइपलाइन निर्माण द्वारा दिनों के लिए कब्जा कर लिया गया था। यह कोड स्निपेट एकमात्र कार्यशील समाधान था।


यह मेरे लिए चाल है, धन्यवाद! अन्य समाधान काम नहीं कर रहे थे क्योंकि बिल्ड नंबर पहले ही फेंक दिया गया था (हम सिर्फ लेट 5 बिल्ड रखते हैं, इसलिए job.getBuildByNumber (...) ने कुछ भी वापस नहीं किया)।
एल टिस्सलर

2

मैं पिछले आधे घंटे में एक ही मुद्दा था ...

मेरी मल्टी-ब्रांच पाइपलाइन में चल रहे एक ज़ोंबी बिल्ड को हटाने में सक्षम नहीं था। यहां तक ​​कि सर्वर यूआई द्वारा या यहां तक ​​कि कमांडलाइन के माध्यम से पुनरारंभ होता है sudo service jenkins restart जिसने निष्पादन को अवरुद्ध कर दिया ... निर्माण रोक नहीं रहा था ... यह हमेशा प्रकट होता है।

उपयोग किया गया संस्करण: जेनकिंस ver 2.150.2

मुझे बहुत गुस्सा आ रहा था, लेकिन ... बिल्ड के लॉग में देखने पर मुझे लॉग के अंत में कुछ इंटरस्टिंग लगा:

एक ज़ोंबी बिल्ड का लॉगफाइल आउटपुट और पुनरारंभ को दिखाने से यह बंद नहीं हुआ

लाल चिह्नित भागों "निराशाजनक भागों" हैं ... जैसा कि आप देख सकते हैं कि मैं हमेशा यूआई से निर्माण को रोकना चाहता था लेकिन यह अभी भी काम नहीं कर रहा है ...

लेकिन पाठ के साथ एक हाइपरलिंक है Click here to forcibly terminate running steps... (पहले हरा एक) अब मैंने लिंक दबाया ...) लिंक निष्पादन के बाद Still pausedएक लिंक Click here to forcibily kill entire build(दूसरा हरा एक) के साथ एक संदेश दिखाई दिया इस लिंक को दबाने के बाद भी बिल्ड अंत में कठिन था मारे गए...

तो यह बिना किसी विशेष प्लगिन के काम करने लगता है (मल्टीब्रांच-पाइपलाइन बिल्ड प्लगइन को छोड़कर)।


यदि आपने लिंक दिया है कि "यहां क्लिक करके पूरे निर्माण को जबरन मारना है" तो मैं वोट कर दूंगा क्योंकि यह मेरे लिए काम करेगा। दुर्भाग्य से यह समाधान नहीं है क्योंकि जेनकींस नवीनतम लॉग दिखाने में विफल रहता है क्योंकि लॉग फ़ाइल कई जीबी है।
mjaggard

क्षमा करें, वर्तमान में मेरी इन लॉग तक पहुँच नहीं है। अगर मुझे यह विफलता फिर से मिलती है, तो मैं उसकी टिप्पणी / अपडेट समाधान जोड़ दूंगा। लेकिन अपने जेनकींस मशीन पर एक लॉगऑन करने के बारे में और tailलिंक प्राप्त करने के लिए सिर्फ एक लॉग दर्शक का उपयोग करें या क्या करें?
डे-जैची

3
यह मेरे लिए काम किया, धन्यवाद! @ मज्गार्ड: लिंक है:<a href="#" onclick="new Ajax.Request('[server]/jenkins/job/[pipeline_name]/[job_number]/kill'); return false">Click here to forcibly kill entire build</a>
kaveish

1

मेरे पास कई ज़ोम्बी-जॉब्स थे, इसलिए मैंने निम्नलिखित स्क्रिप्ट का उपयोग किया:

for(int x = 1000; x < 1813; x = x + 1) {
    Jenkins .instance.getItemByFullName("JOBNAME/BRANCH")
    .getBuildByNumber(x)
    .finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"))
}

1

यह मेरे लिए हर काम करता है:

Thread.getAllStackTraces().keySet().each() {
if (it.name.contains('YOUR JOBNAME')) {  
  println "Stopping $it.name"
  it.stop()
}

Funql.org को धन्यवाद


0

क्या मेरे साथ अब भी यही समस्या रही है, केवल फिक्स सोफे ही टॉमकैट सर्वर को फिर से शुरू करने और बिल्ड को पुनरारंभ करने के लिए किया गया है।


0

एक उपयोगिता जिसे मैंने jkillthread लिखा था, का उपयोग किसी भी जावा प्रक्रिया में किसी भी थ्रेड को रोकने के लिए किया जा सकता है, इसलिए जब तक आप उसी खाते के तहत सेवा चलाने वाली मशीन में लॉग इन कर सकते हैं।


0

बहुत सरल समाधान

जिस कारण से मैं इस मुद्दे को देख रहा था, वह httpपेज पर गलत लिंक था, इसके बजाय httpsनौकरी रोकनी चाहिए। आपको केवल onclickHTML पृष्ठ में विशेषता को संपादित करना है , निम्नलिखित करके

  1. कार्य (पाइपलाइन) का एक कंसोल लॉग खोलें जो लटका हुआ है
  2. नौकरी को मारने के लिए जो कुछ भी उपलब्ध है उस पर क्लिक करें (x आइकन, "यहां क्लिक करें चल रहे कदमों को जबरन समाप्त करने के लिए" आदि) "प्राप्त करने के लिए यहां क्लिक करें" पूरे निर्माण को जबरन मारने के लिए "लिंक दिखाई दे (यह नहीं है फिलहाल क्लिक करने योग्य )
  3. ब्राउज़र का कंसोल खोलें ( क्रोम के लिए तीन में से किसी एक का उपयोग करें: F12; ctrl + shift + i; मेनू-> अधिक टूल-> डेवलपर टूल )
  4. मैन्युअल रूप से "संपूर्ण निर्माण को मारने के लिए यहां क्लिक करें" लिंक का पता लगाएँ या "पेज में एक तत्व चुनें" कंसोल का बटन
  5. onclickअपने मूल्य को संपादित करने के लिए विशेषता पर डबल क्लिक करें
  6. के लिए आवेदन sकरेंhttp है करने के लिएhttps
  7. परिवर्तनों को जमा करने के लिए एंटर दबाएं
  8. "संपूर्ण निर्माण को जबरन मारने के लिए यहां क्लिक करें" लिंक पर क्लिक करें

संदर्भ के लिए स्क्रीनशॉट का उपयोग करें यहां छवि विवरण दर्ज करें


0

Https: // my-jenkins / script पर स्क्रिप्ट कंसोल का उपयोग करना

import hudson.model.Job
import org.jenkinsci.plugins.workflow.job.WorkflowRun

Collection<Job> jobs = Jenkins.instance.getItem('My-Folder').getAllJobs()
for (int i = 0; i < jobs.size(); i++) {
  def job = jobs[i]
  for (int j = 0; j < job.builds.size(); j++) {
    WorkflowRun build = job.builds[j]
    if (build.isBuilding()) {
      println("Stopping $job ${build.number}")
      build.setResult(Result.FAILURE)
    }
  }
}

0

इनमें से किसी भी समाधान ने मेरे लिए काम नहीं किया। मुझे उस मशीन को रिबूट करना पड़ा जिस पर सर्वर स्थापित किया गया था। अब नाकाबिल नौकरी चली गई है।


-1

आप बस नौकरी की नकल कर सकते हैं और पुराने को हटा सकते हैं। यदि यह मायने नहीं रखता कि आपने पुराने बिल्ड लॉग खो दिए हैं।


-2

यहाँ बताया गया है कि मैंने 2.100ब्लू ओशन के साथ संस्करण में इस मुद्दे को कैसे तय किया

  • मेरे द्वारा स्थापित केवल प्लग इन बिटबकेट के लिए हैं।
  • मेरे पास केवल एक नोड है।

sshमेरे जेनकींस बॉक्स में
cd ~/.jenkins(जहां मैं जेनकींस रखता हूं)
cd job/<job_name>/branches/<problem_branch_name>/builds
rm -rf <build_number>

इसके बाद, आप वैकल्पिक रूप से संख्या को बदल सकते हैं nextBuildNumber(मैंने ऐसा किया था)

अंत में, मैंने brew services restart jenkinsजेनकींस को फिर से शुरू किया ( ) यह कदम स्पष्ट रूप से भिन्न होगा कि आप जेनकिंस को कैसे प्रबंधित और इंस्टॉल करते हैं।


-3

नीला-सागर UI दर्ज करें। वहां से काम रोकने की कोशिश करें।


इसका क्या मतलब है? मेरे जेनकिन्स सर्वर में ऐसा कोई UI नहीं है
निको हेस

नीला महासागर एक बहुत ही सामान्य जेनकिंस प्लगइन है, आप इसके बारे में यहां पढ़ सकते हैं ।
user3360767

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