jenkins - Jenkins Pipeline:如何为单个测试分配多个节点 - 分布式测试编排
问题描述
这不是一个正常的“在许多奴隶上运行这项工作”的问题!
千篇一律的答案是行不通的。
用例
我正在尝试使用 Jenkins 流水线对涉及一个“客户端”和许多“服务器”的分布式软件进行测试,方法是为这些角色分配 Jenkins 从站,在从站上运行组件,然后将其全部拆除。我们可以假设“服务器”将运行 Web 服务器,而“客户端”对它们运行“wget”。
注意事项
我正在使用脚本化管道(不是声明性的)。本质上,当我在“客户端”节点上运行客户端逻辑时,我需要所有“服务器”都启动。
显然顺序node{}块不起作用,因为我需要所有从属服务器同时启动。并行可能工作,我对这个选项持开放态度,但似乎很难调试。
我的解决方案
所以这是我到目前为止提出的。这是一个简化的例子,可能在每个节点关闭之后(设置每个服务器)和每个节点关闭接近尾声(清理每个服务器)都有逻辑,或者都可以由客户端完成,无所谓.
def allocatedServerList = []
// Allocate 3 "servers" and then 1 client. Keep servers allocated.
node {
allocatedServerList << env.NODE_NAME
node {
allocatedServerList << env.NODE_NAME
node {
allocatedServerList << env.NODE_NAME
node {
//this is the client
sh "run some client work against ${allocatedServerList}"
//eg: ssh to each server, start some service, pound it for a while, shut them down
}
}
}
}
令人惊讶的是,这很好用。
任何人都可以提出更好的方法吗?嵌套代码的缺点是您无法轻松更改节点的数量(没有递归方法,这使得它不可读)
解决方案
要在所有节点上运行,您可以使用以下内容:
该示例展示了如何从 Pipeline 触发所有 Jenkins 节点上的作业。
摘要: * 该脚本使用 NodeLabel 参数插件将作业名称传递给有效负载作业。* 节点列表检索是使用 Jenkins API 执行的,因此需要在沙盒模式下获得脚本批准 要查看 jenkins.io 中的此示例,请访问:Trigger Job On All Nodes
推荐阅读
- javascript - 如何使用类中的静态 getter 并调用对象并使用 this 关键字?
- node.js - 如何控制并从 apm 无人机获取实时遥测数据以响应和基于 nodejs 的 GCS?
- javascript - 使用 CSS/Javascript (splitting.js) 将动态文本包裹在旋转的圆柱体周围
- docker - .net 项目的 docker build 完成后如何启动多个微服务?
- django - 如何处理 django_rest_framework 中的关系字段
- reactjs - 在 React 应用程序 Pod 中无法访问 kubectl 机密
- java - ZonedDateTime 不显示通过 DateTimeFormatter 预期的时区
- ruby-on-rails - Ruby on Rails 无法更新 pg 数据库表值
- excel - VBA Excel 模块 - 保存为 pdf 并发送
- java - 如何根据另一个文件的列替换excel文件的列