शीर्ष जवाब एक विशेष रूप से खराब समय पर जेनकींस पुनः आरंभ करने की वजह से मैं ज़ोंबी नौकरियों की एक बहुत बड़ी संख्या (~ 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
।