2012-01-11 13 views
6

का उपयोग करके नोड लेबल को संशोधित करने के लिए क्या कोई जानता है कि किसी भी मैन्युअल रूप से जेनकिन्स/हडसन नोड लेबल को संशोधित करने के तरीके को कैसे पता चलता है? मेरा मतलब है, सीएलआई एपीआई की तरह एक एपीआई पूरी तरह से यह उपकरण प्रदान करता है (बेशक जेनकिन्स/हडसन को पुनरारंभ किए बिना)।जेनकिन्स/हडसन सीएलआई एपीआई ग्रोवी

मेरा अनुमान है कि सबसे अच्छा विकल्प जेनकिन्स/हडसन गेट्स में प्रवेश करने के लिए ग्रोवी स्क्रिप्ट का उपयोग कर रहा है।

जावा जार HUDSON_URL -s: की तरह कुछ निष्पादित 8080 ग्रूवी /path/to/groovy.groovy

की तरह है कि स्क्रिप्ट कुछ की सामग्री होने के नाते: अग्रिम में

for (aSlave in hudson.model.Hudson.instance.slaves) { 
    labels = aSlave.getAssignedLabels() 
    println labels 
    **aSlave.setLabel("blabla")** // this method doesn't exist, is there any other way??? 
} 

धन्यवाद!

विक्टर

उत्तर

1

मैं अभी तक एक तरह से नहीं देखा है या तो गुलाम लेबल बदलने के लिए।

मैंने मुख्य config.xml फ़ाइल को संपादित करने और सीएलआई से पुनः लोड करने के लिए लिया है।

यह हालांकि अलग ही समस्याएं है है - किसी भी नौकरियों वर्तमान में चल खो रहे हैं जब तक अगले जेनकींस पुनः आरंभ - देख https://issues.jenkins-ci.org/browse/JENKINS-3265

4

नोट: अन्य उत्तर थोड़ा पुराने हैं, तो यह है कि जा एपीआई तब से प्रकट हुई है सकता है ।

एपीआई में एक ही स्ट्रिंग के रूप में, नोड लेबल को कॉन्फ़िगर स्क्रीन की तरह ही एक्सेस किया जाता है।

लेबल पढ़ने और लिखने के लिए: Node.getLabelString() और Node.setLabelString(String)

ध्यान दें कि आप प्रभावी लेबल भी प्राप्त कर सकते हैं: Node.getAssignedLabels(), जो लेबल एटॉम का संग्रह देता है जिसमें 'स्व-लेबल' जैसे गतिशील रूप से गणना किए गए लेबल शामिल होते हैं (नोड नाम का प्रतिनिधित्व करते हैं)।

अंतिम, Node कक्षा पर इन विधियों को दास वस्तुओं से सीधे पहुंचा जा सकता है, उदा। के रूप में एक प्रणाली ग्रूवी स्क्रिप्ट:

hudson = hudson.model.Hudson.instance 
hudson.slaves.findAll { it.nodeName.equals("slave4") }.each { slave -> 
    print "Slave $slave.nodeName : Labels: $slave.labelString" 
    slave.labelString = slave.labelString + " " + "offline" 
    println " --> New labels: $slave.labelString" 
} 
hudson.save() 
+0

कैसे और कहाँ मैं इस स्क्रिप्ट को चलाने होगा? इसके अलावा ऐसा लगता है कि अंत में एक अतिरिक्त} है। –

+0

https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Script+Console –

+1

ऐसा नहीं लगता है कि ये परिवर्तन जारी रहते हैं, हालांकि। –

0

मैं एक तरह से यह करने के लिए ग्रूवी Postbuild प्लगइन का उपयोग कर पाया है।

मैं एक जेनकींस काम है कि कुछ मानकों (NodeToUpdate, LABELNAME, DesiredState) ग्रूवी Postbuild प्लगइन में इस सामग्री लेता है और कार्यान्वित किया है:

nodeName = manager.envVars['NodeToUpdate'] 
labelName = manager.envVars['LabelName'] 
set = manager.envVars['DesiredState'] 

for (node in jenkins.model.Jenkins.instance.nodes) { 
    if (node.getNodeName().equals(nodeName)) { 
     manager.listener.logger.println("Found node to update: " + nodeName) 
     oldLabelString = node.getLabelString() 
     if (set.equals('true')) { 
      if (!oldLabelString.contains(labelName)) { 
       manager.listener.logger.println("Adding label '" + labelName  + "' from node " + nodeName); 
       newLabelString = oldLabelString + " " + labelName 
       node.setLabelString(newLabelString) 
       node.save() 
      } else { 
       manager.listener.logger.println("Label '" + labelName + "' already exists on node " + nodeName) 
      } 
     } 
     else { 
      if (oldLabelString.contains(labelName)) { 
       manager.listener.logger.println("Removing label '" + labelName + "' from node " + nodeName) 
       newLabelString = oldLabelString.replaceAll(labelName, "") 
       node.setLabelString(newLabelString) 
       node.save() 
      } else { 
       manager.listener.logger.println("Label '" + labelName + "' doesn't exist on node " + nodeName) 
      } 
     } 
    } 
}