【问题标题】:How to hold Jenkins multiJob execution until chosen nodes are free?如何在所选节点空闲之前保持 Jenkins multiJob 执行?
【发布时间】:2020-08-29 22:46:26
【问题描述】:

我有一个关于詹金斯多工作可能性的问题:


当前状态:

  • 我有 8 个 Jenkins 节点用于执行作业,2 个 Linux 和 6 个 Windows。
  • 我设置了 Multijob,由 3 个 subJobs 组成。
  • MultiJob 设置:限制只能在 Linux 节点上运行
  • SubJob 设置:n1 只能在 Win node1 上运行,n2 只能在 Win node2 上运行,n3 只能在 Win node3 上运行


期望的状态:

  • 当我构建 multiJob 时,我需要它检查并等待 Win 节点 1、2、3 空闲
  • 我需要同时执行 subJobs 1,2,3


这不会是问题,如果所有节点都是空闲的...但是如果这三个节点中至少有一个正在运行其他作业,那么这已经是一个问题了,因为一个 subJob 会晚于其他两个

只有当所有三个选定的节点都空闲/等待它们空闲时,是否有任何方法可以设置一些预构建脚本/另一种运行 subJobs 的方法?

非常感谢所有的想法:)

【问题讨论】:

    标签: shell jenkins nodes parallel-execution


    【解决方案1】:

    您可以检查特定节点上构建执行器的状态作为预构建操作。 如果构建执行器是空闲的,这意味着没有作业在运行,但如果它很忙,则有一些东西正在运行。 为此可以使用简单的 groovy 脚本。

    import hudson.model.Node
    import hudson.model.Slave
    import jenkins.model.Jenkins
    
    Jenkins jenkins = Jenkins.instance
    def jenkinsNodes =jenkins.nodes
    
    for (Node node in jenkinsNodes) 
    {
    // Make sure slave is online
    if (!node.getComputer().isOffline()) 
    {           
        //Make sure that the slave busy executor number is 0.
        if(node.getComputer().countBusy()==0)
            {
           ...put your logic...
        }
    }
    

    }

    谢谢, 深渊

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2020-03-15
      • 2016-09-03
      • 2017-05-24
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多