2012-01-11 14 views
6

Czy ktoś wie, jak modyfikować etykiety węzłów Jenkins/Hudson w sposób inny niż ręczny? Mam na myśli dokładne API, takie jak API CLI, które oferuje to narzędzie (bez restartowania Jenkinsa/Hudsona oczywiście).Interfejs API interfejsu API języka Jenkins/Hudson do modyfikowania etykiet węzłów za pomocą Groovy

Domyślam się, że najlepszą opcją jest użycie skryptu Groovy, aby wejść do jelit Jenkinsa/Hudsona. Wykonując coś jak:

java -jar -s HUDSON_URL: 8080 Groovy /path/to/groovy.groovy

Będąc treść tego skryptu coś takiego:

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??? 
} 

Z góry dzięki!

Victor

Odpowiedz

1

nie widziałem sposób jeszcze zmienić etykietę niewolnikami albo.

Zacząłem edytować główny plik config.xml i wydać przeładowanie z interfejsu CLI.

To ma swoje własne problemy, choć - wszelkie zadania uruchomione zostaną utracone aż do następnego Jenkins restart - patrz https://issues.jenkins-ci.org/browse/JENKINS-3265

4

Uwaga: inne odpowiedzi są nieco stare, więc to może być, że API pojawił odtąd .

Etykiety węzłów są dostępne w interfejsie API jako pojedynczy ciąg, tak jak na ekranie Konfiguracji. Aby uzyskać i odczytać etykiety: Node.getLabelString() i Node.setLabelString(String), należy kliknąć:

Zauważ, że możesz uzyskać efektywne etykiety również poprzez: Node.getAssignedLabels(), która zwraca kolekcję LabelAtom, która obejmuje dynamicznie obliczane etykiety, takie jak "samopodpis" (reprezentujący samą nazwę węzła).

Te metody na klasie Node są również dostępne bezpośrednio z obiektów podrzędnych, np. jako System Groovy Script:

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

Jak i gdzie mogę uruchomić ten skrypt? Poza tym wydaje się, że jest dodatkowy} na końcu. –

+0

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

+1

Nie wydaje się jednak, żeby te zmiany się utrzymywały. –

0

Znalazłem sposób, aby to zrobić za pomocą Plugin Groovy Postbuild.

mam pracę Jenkins, który trwa kilka parametrów (NodeToUpdate, nazwaEtykiety, DesiredState) i wykonuje tę zawartość w Groovy Postbuild wtyczkę:

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) 
      } 
     } 
    } 
} 
Powiązane problemy