সার্ভার পুনরায় আরম্ভ না করে জেনকিন্সে কীভাবে একটি থামানো যায় না এমন জম্বি কাজ বন্ধ করবেন?


178

আমাদের জেনকিন্স সার্ভারে একটি কাজ রয়েছে যা তিন দিন ধরে চলছে, কিন্তু কিছুই করছে না। কোণে লিটল এক্স ক্লিক করা কোনও কাজ করে না, এবং কনসোল আউটপুট লগটিও কিছুই দেখায় না। আমি আমাদের বিল্ড সার্ভারগুলিতে যাচাই করেছি এবং কাজটি মোটেও চলমান বলে মনে হচ্ছে না।

কিছু ফাইল বা লক বা কিছু সম্পাদনা করে জেনকিন্সকে কাজটি "সম্পন্ন" করার উপায় আছে কি? আমাদের যেহেতু প্রচুর কাজ রয়েছে তাই আমরা সত্যই সার্ভারটি পুনরায় আরম্ভ করতে চাই না।


1
জেনকিন্সের সাম্প্রতিক সংস্করণগুলির সাথে মনে হচ্ছে সমাধানটি গ্রহণযোগ্য হিসাবে চিহ্নিত নয়। (তবে '16 এর মধ্যে একটি)
নিকোলাসডব্লিউ 6:38

উত্তর:


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"কি নির্দিষ্ট থ্রেডের নাম মুদ্রণ করতে পারবেন ?
জহরা 20

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
এটি মাল্টি-ব্রাঞ্চ প্রকল্পগুলির জন্যও দুর্দান্ত কাজ করে তবে মূল বিষয়টি হ'ল জেনকিনস.ইনট্যান্স.জেট আইটেমবাইফুলনাম ("<প্রোজেক্ট-নাম> / <
ব্র্যাঙ্ক-

22
এই উত্তরটি আমাকে আমার সমস্যা সমাধানে সহায়তা করেছে। পাইপলাইনটি ছিল মোট জম্বি। উপরের স্ক্রিপ্টটি কাজ করেনি এবং পাইপলাইন কয়েকটি জেনকিন পুনরায় চালু হওয়ার পরেও চলছে was আমি কিছু অভ্যন্তরীণ শ্রেণীর ডকুমেন্টেশন পড়েছি এবং একটি মুছুন () পদ্ধতিটি পেয়েছি যাতে আমার স্ক্রিপ্টটি দেখতে এরকম হয়: এটি Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();সম্পাদন করার পরে এবং অন্য একজন জেনকিনস জম্বি বিল্ড পুনরায় চালু করার পরে অবশেষে চলে গেল।
সিজমন সাদোও

5
finishঅ্যাবস্ট্রাক বিল্ড বা ফ্রিস্টাইল বিল্ড বা মাভেনমডুলেসেট বিল্ডে কোনও পদ্ধতি নেই
জাকুব বোচেনস্কি

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 থেকে


এটিকে লক্ষ্য করুন: আপনি যদি এসভিএন ব্যবহার করে থাকেন (এবং আপনি মানক কনভেনশনগুলি অনুসরণ করেন) তবে আপনার < ব্রাঞ্চ
TVt173

25

আমি এই কাজের জন্য মনিটরিং প্লাগইন ব্যবহার করি । প্লাগইন ইনস্টল করার পরে

  1. জেনকিনস> হডসন / জেনকিন্স মাস্টার পর্যবেক্ষণ পরিচালনা করতে যান
  2. ড্রে দিকে ছোট নীল লিঙ্ক, থ্রেডের বিশদ প্রসারিত করুন
  3. ঝুলানো কাজের নামটির জন্য অনুসন্ধান করুন

    থ্রেডের নামটি এভাবে শুরু হবে

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

  4. আপনার পছন্দসই কাজটি করা লাইনের টেবিলের একেবারে ডানদিকে লাল, বৃত্তাকার বোতামটি ক্লিক করুন


3
এটি নিহত হিসাবে বলেছে, তবে আমরা যখন পৃষ্ঠাটি রিফ্রেশ করি তখন থ্রেডটি জীবিত বলে মনে হচ্ছে
রাঘব এস

মজাদার. আমি এই এক নজর হবে। সম্ভবত এটি নির্মাণের উপর নির্ভর করে। আপনি যদি বাহ্যিক প্রক্রিয়াগুলি শুরু করেছেন, সম্ভবত এএনটি বা মাভেন এক্সটেনশানগুলির দ্বারা, এটি ব্যর্থ হতে পারে।
শেফ

এটি আমার জন্য কাজ করা সমাধান। সবেমাত্র থ্রেডের তালিকায় ,ুকেছে, কাজের নামের জন্য অনুসন্ধান করেছে এবং লাল বোতামটি ক্লিক করেছে। জেনকিনস সার্ভার / মনিটরিং # থ্রেড
গিলবার্তো

24

একবার আমি এমন একটি বিল্ডের মুখোমুখি হই যা "স্ক্রিপ্ট কনসোল" দ্বারা থামানো যায় না। অবশেষে আমি এই পদক্ষেপগুলি দিয়ে সমস্যার সমাধান করেছি:

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

এটি আসলে আমার ক্ষেত্রে সহায়তা করেছিল: কনসোলের মাধ্যমে এটি হত্যার সময়
কাজটির

24

প্রথম প্রস্তাবিত সমাধানটি বেশ কাছাকাছি। যদি আপনি বাধা () এর পরিবর্তে স্টপ () ব্যবহার করেন তবে এটি পলাতক থ্রেডকেও মেরে ফেলবে, যা গ্রোভি সিস্টেম স্ক্রিপ্টে নিরবচ্ছিন্নভাবে চালিত। এটি যে কোনও বিল্ডকে মেরে ফেলবে, এটি একটি কাজের জন্য দৌড়ে। কোডটি এখানে:

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

4
আইএমও যা গ্রহণযোগ্য উত্তর হওয়া উচিত। অন্যান্য সমস্ত উত্তর আমার পক্ষে কার্যকর হয়নি, কারণ বিল্ডটি ইতিমধ্যে একটি বাধাগ্রস্থ অবস্থায় ছিল, তবে এটি পোস্টের বিল্ডিং পদক্ষেপে ঝুলছিল। কেবলমাত্র এই সমাধানটি সত্যিই
বিল্ডিংটি

1
containsএখানে ব্যবহার করা ভুল এবং বিপজ্জনক - যদি আপনার কাজের নাম "রান টেস্ট" হয় তবে এটি "রান টেস্ট - ইন্টিগ্রেশন", "রান টেস্ট - ইউনিট" ইত্যাদির নামে যে কোনও কাজকেও মেরে ফেলবে। যে কেউ এই ব্যবহার করে সে যাতে সতর্কতা অবলম্বন না করে তা অবশ্যই সতর্ক হওয়া উচিত সম্পর্কযুক্ত কাজ অপ্রত্যাশিতভাবে শেষ করুন
ব্র্যান্ডন

13

আপনার যদি অকার্যকর পাইপলাইন কাজ থাকে তবে নিম্নলিখিত চেষ্টা করুন:

  1. বিল্ড প্রগতি বারের পাশের লাল এক্সে ক্লিক করে কাজটি বাতিল করুন
  2. বিরতি দিতে বিল্ডে "বিরতি / পুনরায় শুরু করুন" এ ক্লিক করুন
  3. বিল্ডটি আবার শুরু করতে "বিরতি / পুনঃসূচনা" ক্লিক করুন

বিরতি / পুনরায় কাজ পাইপলাইন কাজ

জেনকিন্স বুঝতে পারবেন যে চাকরিটি সমাপ্ত করা উচিত এবং বিল্ডিং বন্ধ করা উচিত


8
আমার কাছে এই মেনু আইটেমটি নেই।
পাপাইটিস

13

স্ক্রিপ্ট কনসোল বা অতিরিক্ত প্লাগইন ব্যবহার ছাড়াই, আপনি কেবল যা করতে পারেন একটি build পরিত্যাগ লিখে /stop, /termঅথবা /killআপনার ব্রাউজারে বিল্ড URL টি পরে।

উপরের লিঙ্কটি থেকে ভারব্যাটিমের উদ্ধৃতি:

পাইপলাইন কাজগুলি কোনও বিল্ডের ইউআরএল শেষ পয়েন্টগুলিতে HTTP পোষ্ট অনুরোধ প্রেরণ করে বন্ধ করা যায়।

  • <বিল্ড আইডি ইউআরএল> / স্টপ - একটি পাইপলাইন বাতিল করে।
  • <বিল্ড আইডি ইউআরএল> / শব্দ - জোর করে কোনও বিল্ড বন্ধ করে দেয় (স্টপ কাজ না করে তবেই ব্যবহার করা উচিত)।
  • <বিল্ড আইডি ইউআরএল> / হত্যা - একটি পাইপলাইন হার্ড হত্যা kill এটি একটি পাইপলাইন বন্ধ করার জন্য সবচেয়ে ধ্বংসাত্মক উপায় এবং কেবলমাত্র একটি শেষ অবলম্বন হিসাবে ব্যবহার করা উচিত।

7

বিল্ড-টাইমআউট প্লাগইন এ জাতীয় ক্ষেত্রে কার্যকর হতে পারে। এটি খুব বেশি সময় নিলে কাজটি স্বয়ংক্রিয়ভাবে হ্রাস পাবে।


1
দুর্ভাগ্যক্রমে এটি আমাদের পক্ষে বিকল্প নয়, কারণ আমাদের বেশ কয়েকটি কাজ রয়েছে যা কয়েকদিন ধরে চলার কথা রয়েছে (জিজ্ঞাসা করবেন না)
ব্লককি

7
আপনি প্রতি কাজের ভিত্তিতে বিল্ড টাইমআউট কনফিগার করেছেন।
ড্রাকো আটার

1
না, টাইমআউট 95 মিনিটের সাথে সেট করে আমাদের 3 ঘন্টা ধরে একটি বিল্ড আটকে গেছে আমি মনে করি না টাইমআউট প্লাগইনটি ম্যানুয়ালি "বিসর্জন" ক্লিক করার মতোই কাজ করতে পারে
জাকুব বোচেনস্কি

7

আমার ধারণা অনুমান করতে দেরি হয়ে গেছে তবে কিছু লোককে আমার সহায়তা করেছে।

  1. মনিটরিং প্লাগইন ইনস্টল করুন। ( http://wiki.jenkins-ci.org/display/JENKINS/ পর্যবেক্ষণ )
  2. জেনকিনস ইউআরএল / পর্যবেক্ষণ / নোডগুলিতে যান
  3. নীচে থ্রেডস বিভাগে যান
  4. মাস্টার বামে বিশদ বোতামে ক্লিক করুন
  5. ব্যবহারকারীর সময় অনুসারে বাছাই করুন (এমএস)
  6. তারপরে থ্রেডটির নামটি দেখুন, আপনার কাছে বিল্ডের নাম এবং নম্বর থাকবে
  7. এটাকে হত্যা কর

দুঃখিত ছবিগুলি পোস্ট করার মতো যথেষ্ট খ্যাতি আমার নেই।

আশা করি এটি সাহায্য করতে পারে


1
সাহায্য করছে না, বলা হয়েছে নিহত। তবে আবার যখন পৃষ্ঠাটি পুনরায় লোড হবে তখন আমি সেই থ্রেডটি দেখতে পাচ্ছি
রাঘব এস

আপনি কি বিল্ডের থ্রেড বা বিল্ডের একটি সাবথ্রেডকে হত্যা করছেন? এই সুতার নাম কী? আমার ধারণা আপনি ভালটিকে মারবেন না আপনি যদি বিল্ডের থ্রেডটি হত্যা করেন তবে আপনি বিল্ডটি সফলভাবে সমাপ্ত হতে দেখবেন।
সাইমন

2
আমি সেই থ্রেডটি হত্যার চেষ্টা করেছি যা দাসের নির্বাহী সংখ্যার সাথে সম্পর্কিত যা কাজের নামও ছিল। এছাড়াও আমি হ্যান্ডলিং জিইটি-র সাথে যুক্ত আরও বেশ কয়েকটি থ্রেড পেয়েছি এবং এতে থাকা তথ্যগুলি সাবভারশন সম্পর্কিত ছিল। উভয়কে হত্যা করাও কোনও লাভ হয়নি। অবশেষে পুনঃসূচনা আমাকে সাহায্য করেছে। আরও একটি পর্যবেক্ষণ হ'ল, এসভিএন সমিতি ব্যতীত অন্য থ্রেডগুলি হ'লযোগ্য।
রাঘব এস

এই উত্তরটি @ শেফ উত্তরের একটি অনুলিপি, যা এক মাস আগে পোস্ট করা হয়েছিল।
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)কাজটি শেষ হয়েছে কিনা তা নির্ধারণ করতে ব্যবহার করে। একটি বিল্ড সারিতে কিন্তু এখনো শুরু ওভার iterated হবে না (যেহেতু যে Build এ হবে না job.builds), এবং একটি build ইতিমধ্যে সমাপ্ত ছাড়া অন্য কিছু ফিরে আসবে 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 করছে (যেমন দীর্ঘ ফাইলের অনুলিপি বা এসভিএন আপডেট) তবে এটি বাতিল করা যাবে না।

এটি আসলে অসম্ভব নয়। আপনার কাজটি চালিত থ্রেডটিতে বাধা দিতে আপনি জেনকিন্স স্ক্রিপ্ট কনসোল ব্যবহার করতে পারেন। ব্যাখ্যাটি এখানে দেখুন: 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

এই একই সমস্যা ছিল কিন্তু স্ট্যাক থ্রেড ছিল না। আমরা জেনকিনস কনসোলে এই স্নিপেটটি ব্যবহার করে কাজটি মুছে ফেলেছি। আপনার সাথে কাজের নাম এবং বুয়েল ডিম্বার প্রতিস্থাপন করুন।

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()

অন্যান্য উত্তর বিবেচনা:

  • @ শেফের উত্তর: কার্যকর হয়নি (পরবর্তী পয়েন্টটি দেখুন এবং নীচে আপডেট করুন)।
  • উত্তরগুলি সহ Thread.getAllStackTraces(): কোনও মিলের থ্রেড নেই।
  • @ লেভেন্তে-হোলó এর উত্তর এবং এর সাথে সমস্ত উত্তর getBuildByNumber(): বিল্ডটি আসলে সেখানে আর না থাকায় প্রয়োগ করা হয়নি!
  • @ অস্টিনফ্রোম্বস্টনের উত্তর: এটি আমার প্রয়োজনের কাছাকাছি এসেছিল তবে এই মুহূর্তে এটি অন্য কোনও বিল্ডিংগুলিকেও থামিয়ে দিত।

আপডেট:
আমি আবারও একইরকম পরিস্থিতি অনুভব করেছি, যেখানে একজন নির্বাহক কয়েকদিন ধরে (এখনও বিদ্যমান) সমাপ্ত পাইপলাইন বিল্ড দ্বারা দখল ছিল was এই কোড স্নিপেট একমাত্র কার্যক্ষম সমাধান ছিল।


এটি আমার জন্য কৌশলটি করেছে, ধন্যবাদ! বিল্ড নম্বরটি ইতিমধ্যে ফেলে দেওয়া হওয়ায় অন্যান্য সমাধানগুলি কাজ করছে না (আমরা কেবল ল্যাট 5 টি বিল্ড রেখেছি, সুতরাং জব.সেটবিল্ডবাইम्बर্বার (...) কিছুই ফেরেনি)।
এল টিশলার

2

আমি গত অর্ধ ঘন্টা একই সমস্যা ছিল ...

আমার বহু-শাখা পাইপলাইনে চলমান একটি জম্বি বিল্ড মুছতে সক্ষম হননি। এমনকি সার্ভার ইউআই দ্বারা পুনরায় আরম্ভ বা এমনকি sudo service jenkins restart কমান্ডলাইনের মাধ্যমেও কার্যকর করা অবরুদ্ধ করেছে ... বিল্ডটি থামানো যায়নি ... এটি সর্বদা পুনরায় প্রদর্শিত হয়েছিল।

ব্যবহৃত সংস্করণ: জেনকিন্স ভার্স 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>
কাভিশ

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"))
}


0

আমার সাথে এখন দুবার একই সমস্যা হয়েছে, একমাত্র ফিক্স সোফাটি হল টমক্যাট সার্ভারটি পুনরায় চালু করতে এবং বিল্ডটি পুনরায় চালু করা।


0

আমি জকিলথ্রেড নামে একটি ইউটিলিটি লিখেছি যে কোনও জাভা প্রক্রিয়াতে কোনও থ্রেড থামাতে ব্যবহার করা যেতে পারে, আপনি যতক্ষণ না একই অ্যাকাউন্টের অধীনে পরিষেবাটি চালাচ্ছেন এমন মেশিনে লগ ইন করতে পারেন।


0

খুব সহজ সমাধান

যে কারণে আমি এই সমস্যাটি দেখছিলাম তার httpপরিবর্তে পৃষ্ঠায় ভুল লিঙ্কটি ছিল httpsকাজ বন্ধ করা উচিত। আপনাকে যা করতে হবে তা হ'ল onclickএইচটিএমএল পৃষ্ঠাতে বৈশিষ্ট্যটি সম্পাদনা করে অনুসরণ করে

  1. হ্যাং হয়ে গেছে এমন কাজের (পাইপলাইন) কনসোল লগ খুলুন
  2. কাজটি (x আইকন, "জোর করে চলমান পদক্ষেপগুলি শেষ করতে এখানে ক্লিক করুন" ইত্যাদি) যা পেতে পাওয়া যায় তার জন্য ক্লিক করুন "সম্পূর্ণ বিল্ডিং জোর করে হত্যা করতে এখানে ক্লিক করুন" লিঙ্কটি দৃশ্যমান (এটি নয়) এই মুহুর্তে ক্লিকযোগ্য হবে
  3. ব্রাউজারের কনসোলটি খুলুন ( ক্রোমের জন্য তিনটির যে কোনও একটি ব্যবহার করুন: F12; ctrl + shift + i; মেনু-> আরও সরঞ্জাম-> বিকাশকারী সরঞ্জাম )
  4. কনসোলের বোতামটি বা "পৃষ্ঠায় একটি উপাদান নির্বাচন করুন" ব্যবহার করে "পুরো বিল্ডটি জোর করে হত্যা করতে এখানে ক্লিক করুন" সন্ধান করুন
  5. onclickএর মান সম্পাদনা করতে বৈশিষ্ট্যে ডাবল ক্লিক করুন
  6. পরিশেষে sকরার httpআছেhttps
  7. পরিবর্তনগুলি জমা দেওয়ার জন্য এন্টার টিপুন
  8. "পুরো বিল্ডটি জোর করে হত্যা করতে এখানে ক্লিক করুন" লিঙ্কটি ক্লিক করুন

রেফারেন্সের জন্য স্ক্রিনশট ব্যবহার করুন এখানে চিত্র বর্ণনা লিখুন


0

স্ক্রিপ্ট কনসোলটি https: // আমার-জেনকিন্স / স্ক্রিপ্টে ব্যবহার করে

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 প্রবেশ করান। সেখান থেকে কাজ বন্ধ করার চেষ্টা করুন।


ওটার মানে কি? আমার জেনকিন্স সার্ভারে এমন ইউআই নেই
নিকো হােস

নীল মহাসাগর একটি খুব সাধারণ জেনকিনস প্লাগইন, আপনি এটি সম্পর্কে এখানে পড়তে পারেন ।
ব্যবহারকারী 3360767

এটি কি ক্লাসিক ইউআইয়ের চেয়ে আলাদাভাবে চাকরিটি বাতিল করতে পারে? সন্দেহজনক মনে হচ্ছে।
স্টকবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.