[英]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.