这不是正常的“在许多奴隶上运行此作业”问题!
Cookie-Cutter的答案不起作用。
我正在尝试通过Jenkins管道为涉及一个“客户端”和许多“服务器”的分布式软件进行测试,方法是为这些角色分配Jenkins从属,在这些从属上运行组件,然后将其全部拆散。我们可以假装“服务器”将运行Web服务器,而“客户端”将对它们运行“ wget”。
我正在使用脚本化管道(非声明性)。本质上,当我在“客户端”节点上运行客户端逻辑时,我需要所有“服务器”都启动。
显然,顺序的 node {} 块不起作用,因为我需要所有从站同时启动。并行可能会起作用,并且我可以使用此选项,但是似乎很难调试。
因此,这是到目前为止我要提出的内容。这是一个简化的示例,在每个 node 关闭(设置每个服务器)之后和每个 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
}
}
}
}
令人惊讶的是,这很好用。
有人可以建议一种更好的方法吗?嵌套代码的缺点是您无法轻松更改节点数(没有递归方法,这将使其变得不可读)
答案 0 :(得分:-1)
要在所有节点上运行,您可以使用以下命令:
该示例显示了如何从Pipeline触发所有Jenkins节点上的作业。
摘要:*该脚本使用NodeLabel Parameter插件将作业名称传递给有效负载作业。 *节点列表检索是使用Jenkins API执行的,因此在沙盒模式下需要脚本批准 要从jenkins.io查看此示例,请访问:Trigger Job On All Nodes