Jenkins Pipeline:如何为单个测试分配多个节点-分布式测试流程

时间:2019-02-14 14:06:32

标签: jenkins groovy jenkins-pipeline

这不是正常的“在许多奴隶上运行此作业”问题!

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
         }
      }
   }
}

令人惊讶的是,这很好用。

有人可以建议一种更好的方法吗?嵌套代码的缺点是您无法轻松更改节点数(没有递归方法,这将使其变得不可读)

1 个答案:

答案 0 :(得分:-1)

要在所有节点上运行,您可以使用以下命令:

Trigger Job On All Nodes

该示例显示了如何从Pipeline触发所有Jenkins节点上的作业。

摘要:*该脚本使用NodeLabel Parameter插件将作业名称传递给有效负载作业。 *节点列表检索是使用Jenkins API执行的,因此在沙盒模式下需要脚本批准 要从jenkins.io查看此示例,请访问:Trigger Job On All Nodes