【问题标题】:Change number of executors on existing Jenkins node by script通过脚本更改现有 Jenkins 节点上的执行者数量
【发布时间】:2016-02-15 09:28:13
【问题描述】:
我不能在已经存在的节点(不是主节点)上编写脚本和更改执行程序的数量。最好使用 groovy,但如果有插件或 CLI 命令可以完成同样有趣的技巧。
我正在尝试做的事情的片段:
jenkins.model.Jenkins.instance.nodes.each { node ->
println node.getNumExecutors()
//How do I set the number of executors for a node?
}
【问题讨论】:
标签:
jenkins
jenkins-plugins
jenkins-cli
【解决方案1】:
我使用 Slave 管理它,它是 Node 的子类。
下面是我使用的方法的一部分,以 target_label 和 target_executors 作为参数
def nodes = nodesByLabel(target_label) // requires plugin "Pipeline Utility Steps"
def j = Jenkins.getInstanceOrNull();
for (int i = 0; i < nodes.size(); ++i) {
def aSlave = (Slave) j.getNode(nodes[i]) // here cast is needed
aSlave.setNumExecutors(target_executors.toInteger())
aSlave.save()
println aSlave.getDisplayName() + "-" + aSlave.getNumExecutors()
}
j.reload()
【解决方案2】:
目前这是不可能的 - Jenkins 节点的 numExecutors 属性是只读的。
来自JENKINS-23534:
[setNumExecutors] 故意为 private,因为 Jenkins 不提供更改 SlaveComputer 或 Slave 的执行者数量的方法。相反,您更改配置,即替换现有的Slave。
【解决方案3】:
您可以运行下面的脚本来修改 Jenkins config.xml 文件……然后只需在 Manage Jenkins 中“从磁盘重新加载配置”。
这适用于http://jenkins:8080/script 控制台。
import groovy.xml.XmlUtil
// the path to your jenkins config.xml
filePath = '/opt/sites/.jenkins/config.xml'
fileContents = new File(filePath).text
def config = new XmlSlurper().parseText(fileContents)
config.slaves[0].slave.each {
it.numExecutors = 5
}
def writer = new FileWriter(filePath)
XmlUtil.serialize(config, writer)
如果你想自动重新加载配置,你可以添加:
Jenkins.instance.reload()
【解决方案4】:
无法通过 Jenkins API 更改从属服务器上的执行器数量,这非常痛苦。您必须删除从属服务器并重新创建它以更改执行程序的数量,因此您需要首先确保从属服务器上没有运行任何构建。
以自动化方式执行此操作的另一个选项是使用 Jenkins CLI 中的 create-slave 和 delete-slave 命令(转到 Jenkins 实例中的 /cli 链接以获取 CLI 文档)。