shell - 如何在所选节点空闲之前保持 Jenkins multiJob 执行?
问题描述
我有一个关于詹金斯多工作可能性的问题:
当前状态:
- 我有 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,只有当所有三个选择的节点都是空闲的/等待它们空闲时?
非常感谢所有的想法:)
解决方案
您可以检查特定节点上构建执行程序的状态作为预构建操作。如果构建执行器是空闲的,这意味着没有作业在运行,但如果它很忙,那么它正在运行。简单的 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
推荐阅读
- android - Firebase.goOffline () и Firebase.goOnline () будут удалены из firebase?
- python - 在会话中运行输出层时出现FailedPreconditionError?
- azure - 根据订阅密钥确定产品?
- sql - 如何在 cube.js 中实现子查询
- javascript - 在 iPhone 和 iPad 等苹果产品上查看时网站画廊后面的图像显示,但在所有其他设备上正常显示
- c++ - 如何像在 JavaScript 中一样“深度冻结”对象?
- c# - DevExtreme FileUploader 不工作模式
- javascript - 如何使用另一个 JS 脚本在 HTML 上触发 JS 事件?
- aws-amplify - AccessDeniedExceptionnull(服务:AWSLambdaInternal;状态代码:403 Amplify
- angular - Http Post Angular 9 参数