Jenkins/Hudson CLI API to modify the node labels using Groovy

前端 未结 3 1521
死守一世寂寞
死守一世寂寞 2021-02-20 03:13

Does anyone know how to modify the Jenkins/Hudson node labels in a non-manually way? I mean, thorough an API like the CLI API that this tool offers (without restarting Jenkins/H

3条回答
  •  暖寄归人
    2021-02-20 03:36

    I've found a way to do this using the Groovy Postbuild Plugin.

    I have a Jenkins job that takes a few parameters (NodeToUpdate, LabelName, DesiredState) and executes this content in the Groovy Postbuild Plugin:

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

提交回复
热议问题