问题描述
我对詹金斯(Jenkins)多种工作的可能性有疑问:
当前状态:
- 我有8个Jenkins节点用于执行作业,有2个Linux和6个Windows。
- 我设置了Multijob,由3个子职位组成。
- MultiJob设置:仅在Linux节点上运行具有限制
- SubJob设置:n1只能在Win节点1上运行,n2只能在Win节点2上运行,n3只能在Win节点3上运行
期望的状态:
- 构建multiJob时,我需要它检查并等待Win节点1,2,3空闲
- 我需要同时执行1,3个子任务
这不是问题,如果所有节点都空闲...但是,如果这三个节点中的至少一个正在运行其他作业,这已经是一个问题,因为与之相比,一个subJob会比较晚另外两个
只有在所有三个选定节点都空闲/等待它们空闲时,有没有办法设置一些预构建脚本/另一种方式来运行subJobs?
非常感谢所有想法:)
解决方法
您可以在特定节点上检查构建执行程序的状态,作为构建前的操作。 如果构建执行器处于空闲状态,则意味着没有作业在运行,但是如果繁忙,则说明正在运行某些内容。 简单的常规脚本可以用于此目的。
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...
}
}
}
谢谢, 超自然