【问题标题】: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 不提供更改 SlaveComputerSlave 的执行者数量的方法。相反,您更改配置,即替换现有的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 文档)。

          【讨论】:

            猜你喜欢
            • 2020-05-31
            • 1970-01-01
            • 2017-11-13
            • 1970-01-01
            • 1970-01-01
            • 2020-10-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多