按脚本

时间:2016-02-15 09:28:14

标签: jenkins jenkins-plugins jenkins-cli

我不能编写脚本并更改已存在的节点(非主节点)上的执行程序数。最好是使用groovy但是如果有插件或CLI命令可以做的话也很有趣。

我要做的事情的片段:

jenkins.model.Jenkins.instance.nodes.each { node ->
  println node.getNumExecutors()

  //How do I set the number of executors for a node?
}

4 个答案:

答案 0 :(得分:1)

目前还没有 - Jenkins节点的numExecutors属性是只读的。

来自JENKINS-23534

  

[setNumExecutors]故意private,因为Jenkins没有提供更改SlaveComputerSlave创建者执行者数量的方法。相反,您可以更改配置,这意味着替换现有的Slave

答案 1 :(得分:1)

您可以运行下面的脚本来修改Jenkins config.xml文件......然后只需#34;从磁盘重新加载配置"在管理詹金斯。

这适用于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()

答案 2 :(得分:0)

您无法通过Jenkins API更改从属服务器上的执行程序数量,这非常痛苦。您必须删除从站并重新创建它以更改执行程序的数量,因此您需要确保首先在从站上没有运行构建。

以自动方式执行此操作的另一个选项是在Jenkins CLI中使用create-slave和delete-slave命令(转到Jenkins实例中的/ cli链接以获取CLI文档)。

答案 3 :(得分:0)

我使用Slave(它是Node的子类)进行管理的

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