如何保持 Jenkins multiJob 执行直到所选节点空闲?
How to hold Jenkins multiJob execution until chosen nodes are free?
我有一个关于 jenkins multijob 可能性的问题:
当前状态:
- 我有 8 个 Jenkins 节点用于作业执行,2 个 Linux 和 6 个 Windows。
- 我设置了 Multijob,包含 3 个子作业。
- MultiJob 设置:它限制 运行 仅在 Linux 个节点上
- SubJob设置:n1可以运行只能在Win node1上,n2只能在Win node2上,n3只能在Win node3上
期望状态:
- 当我构建 multiJob 时,我需要它来检查并等待 Win 节点 1、2、3 空闲
- 我需要同时执行子作业1,2,3
这不是问题,如果所有节点都是空闲的...但如果这三个节点中至少有一个正在 运行 执行其他任务,这就已经是个问题了,因为一个子作业会比另外两个迟到
只有当所有三个选定的节点都free/to等待它们空闲时,是否有任何方法可以为 运行 子作业设置一些预构建 script/another 方式?
非常感谢所有想法:)
您可以通过 pre-build 操作检查特定节点上构建执行程序的状态。
如果构建执行器是空闲的,那意味着没有工作是 运行 但如果它很忙,那就是 运行 有东西进入它。
简单的 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...
}
}
}
谢谢,
Subhadeep
我有一个关于 jenkins multijob 可能性的问题:
当前状态:
- 我有 8 个 Jenkins 节点用于作业执行,2 个 Linux 和 6 个 Windows。
- 我设置了 Multijob,包含 3 个子作业。
- MultiJob 设置:它限制 运行 仅在 Linux 个节点上
- SubJob设置:n1可以运行只能在Win node1上,n2只能在Win node2上,n3只能在Win node3上
期望状态:
- 当我构建 multiJob 时,我需要它来检查并等待 Win 节点 1、2、3 空闲
- 我需要同时执行子作业1,2,3
这不是问题,如果所有节点都是空闲的...但如果这三个节点中至少有一个正在 运行 执行其他任务,这就已经是个问题了,因为一个子作业会比另外两个迟到
只有当所有三个选定的节点都free/to等待它们空闲时,是否有任何方法可以为 运行 子作业设置一些预构建 script/another 方式?
非常感谢所有想法:)
您可以通过 pre-build 操作检查特定节点上构建执行程序的状态。 如果构建执行器是空闲的,那意味着没有工作是 运行 但如果它很忙,那就是 运行 有东西进入它。 简单的 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...
}
}
}
谢谢, Subhadeep