繁体   English   中英

Jenkins / Hudson CLI API使用Groovy修改节点标签

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

有谁知道如何以非手动方式修改Jenkins / Hudson节点标签? 我的意思是,通过这个工具提供的CLI API之类的API(当然不需要重新启动Jenkins / Hudson)。

我的猜测是,最好的选择是使用Groovy脚本进入Jenkins / Hudson内核。 执行类似的事情:

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

提前致谢!

胜利者

注意:其他答案有点旧,所以可能是API从那时起出现了。

节点标签在API中作为单个字符串进行访问,就像在Configure屏幕中一样。

读取和写入标签: Node.getLabelString()Node.setLabelString(String)

请注意,您还可以通过以下方式获取有效标签: Node.getAssignedLabels() ,它返回LabelAtom的Collection,其中包含动态计算的标签,例如'self-label'(表示节点名称本身)。

最后, Node类上的这些方法也可以从slave对象直接访问,例如作为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()

我已经找到了使用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)
            }
        }
    }
}

我还没有看到改变奴隶标签的方法。

我已经开始编辑主config.xml文件并从CLI发出重新加载。

这有它自己的问题 - 当前运行的任何工作都会丢失,直到下一个jenkins重新启动 - 请参阅https://issues.jenkins-ci.org/browse/JENKINS-3265

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM