CLI API Jenkins / Hudson для изменения меток узлов с помощью Groovy - PullRequest
7 голосов
/ 11 января 2012

Кто-нибудь знает, как изменить метки узлов Дженкинса / Хадсона не вручную? Я имею в виду тщательный API, такой как CLI API, который предлагает этот инструмент (конечно, без перезапуска Jenkins / Hudson).

Полагаю, что лучшим вариантом является использование скрипта Groovy для входа в кишки Дженкинса / Хадсона. Выполнение чего-то вроде:

java -jar -s HUDSON_URL: 8080 groovy /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???
}

Заранее спасибо!

Victor

Ответы [ 3 ]

7 голосов
/ 30 октября 2013

Примечание: другие ответы немного устарели, поэтому с тех пор может появиться API.

Доступ к меткам узла в API осуществляется в виде одной строки, как на экране настройки.

Для чтения и записи меток: Node.getLabelString () и Node.setLabelString (String) .

Обратите внимание, что вы также можете получить эффективные метки с помощью: Node.getAssignedLabels () , который возвращает коллекцию LabelAtom, которая включает динамически вычисляемые метки, такие как «метка собственной личности» (представляющая узел само имя).

Наконец, эти методы класса Node также доступны напрямую из подчиненных объектов, например, как системный Groovy скрипт:

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()
2 голосов
/ 02 сентября 2016

Я нашел способ сделать это с помощью плагина Groovy Postbuild.

У меня есть задание Jenkins, которое принимает несколько параметров (NodeToUpdate, LabelName, DesiredState) и выполняет этот контент в плагине Groovy 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)
            }
        }
    }
}
1 голос
/ 07 июля 2012

Я еще не видел способа изменить метку ведомого.

Я приступил к редактированию основного файла config.xml и выполнению перезагрузки из CLI.

У этого есть свои проблемы - все выполняющиеся в настоящий момент задания теряются до следующего перезапуска jenkins - см. https://issues.jenkins -ci.org / browse / JENKINS-3265

...