2014-06-06 5 views
6

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

बोटम लाइन - क्या जेनकिन में नोड्स (दास) को हटाने का कोई तरीका है, सभी ऑफलाइन नोड्स को साफ करें या यहां तक ​​कि सभी नोड्स को हटाएं? जेनकिंस सर्वर को बहाल करने में मदद नहीं मिली, और मुझे जेनकींस एपीआई में कोई रास्ता नहीं मिला।

, किसी भी विचार की सराहना करेंगे इससे पहले कि मैं एक सेलेनियम स्क्रिप्ट या कुछ लिखने के लिए शुरू कर ...

बहुत धन्यवाद!

उत्तर

11

यह script है जिसमें नोड्स को हटाने के लिए टिप्पणी की गई एक अनुभाग है।

यह करने में बहुत जवाब के लिए Jenkins script console

for (aSlave in hudson.model.Hudson.instance.slaves) { 
    println('===================='); 
    println('Name: ' + aSlave.name); 
    println('getLabelString: ' + aSlave.getLabelString()); 
    println('getNumExectutors: ' + aSlave.getNumExecutors()); 
    println('getRemoteFS: ' + aSlave.getRemoteFS()); 
    println('getMode: ' + aSlave.getMode()); 
    println('getRootPath: ' + aSlave.getRootPath()); 
    println('getDescriptor: ' + aSlave.getDescriptor()); 
    println('getComputer: ' + aSlave.getComputer()); 
    println('\tcomputer.isAcceptingTasks: ' + aSlave.getComputer().isAcceptingTasks()); 
    println('\tcomputer.isLaunchSupported: ' + aSlave.getComputer().isLaunchSupported()); 
    println('\tcomputer.getConnectTime: ' + aSlave.getComputer().getConnectTime()); 
    println('\tcomputer.getDemandStartMilliseconds: ' + aSlave.getComputer().getDemandStartMilliseconds()); 
    println('\tcomputer.isOffline: ' + aSlave.getComputer().isOffline()); 
    println('\tcomputer.countBusy: ' + aSlave.getComputer().countBusy()); 
    //if (aSlave.name == 'NAME OF NODE TO DELETE') { 
    // println('Shutting down node!!!!'); 
    // aSlave.getComputer().setTemporarilyOffline(true,null); 
    // aSlave.getComputer().doDoDelete(); 
    //} 
    println('\tcomputer.getLog: ' + aSlave.getComputer().getLog()); 
    println('\tcomputer.getBuilds: ' + aSlave.getComputer().getBuilds()); 
} 
+0

यह समाधान अच्छा है (इस अर्थ में कि अगर वहाँ एक नोड यह किसी भी काम (रों) चल रहा है, तो है 'कम से कम पहले स्लेव नोड को ऑफलाइन के रूप में चिह्नित करें और फिर नौकरी (ओं) को पूरा करने के लिए प्रतीक्षा करें), बढ़िया! लेकिन अगर हम यहां "हटाएं" भाग को सक्षम करते हैं, तो एक समस्या है यानी यदि कोई दास नोड कोई जॉब चला रहा है, तो उन सभी नौकरियों को निरस्त कर दिया जाएगा (जो अच्छा नहीं है)। इस स्क्रिप्ट में थोड़ी अधिक वृद्धि के साथ, हम स्क्रिप्ट को बुद्धिमान होने के लिए पर्याप्त बुद्धिमान बना सकते हैं जब तक कि सभी दास मुक्त न हों (या तो ऑनलाइन/ऑफलाइन) और फिर उन्हें शानदार तरीके से हटा दें। मैं जल्द ही उत्तर पोस्ट करूंगा। –

+0

यहां देखें: http://stackoverflow.com/questions/34910485/block-a-job-from-running-if-given-nodes-with-a-given-labels-is-are-running-a इसी तरह के लिए समाधान –

0

धन्यवाद चलाता है।

इसे करने का एक और तरीका मैन्युअल रूप से '$ {JENKINS_HOME} /config.xml' फ़ाइल को संपादित करना है (और उदाहरण के लिए रेगेक्स द्वारा ढूंढें/प्रतिस्थापित करें)।

+0

मुझे नहीं लगता कि यह जेनकींस v2.X पर लागू होता है। – vikas027

0

यह Copy>Paste>Run KeepCalmAndCarryOn उत्तर का संस्करण है। जाओ का प्रबंधन करने के जेनकींस> स्क्रिप्ट कंसोल> कॉपी & इस कोड को पेस्ट> भागो

for (aSlave in hudson.model.Hudson.instance.slaves) { 
    if (aSlave.getComputer().isOffline()) { 
     aSlave.getComputer().setTemporarilyOffline(true,null); 
     aSlave.getComputer().doDoDelete(); 
    } 
} 

enter image description here

+0

हे ... उसने कहा dodo – Clintm

संबंधित मुद्दे