我需要在詹金斯管道的不同阶段分配相同的节点。场景是我需要运行分布式 JMeter 测试并创建一个管道,如下所示:
- stage1:并行设置一些代理,例如获取源代码和测试,编译源并安装依赖项,将jmeter-server作为守护进程运行,获取当前节点的IP地址。
- stage2:在stage1中分配相同的节点,使用一个节点作为JMeter主节点,将stage1中所有节点的IP地址列表传递给JMeter.sh进程进行分布式测试。
node("master"){
def LIST_IP_ADDRESS_NODES=[]
stage("Setup-JMeter-Agent"){
parallel "node1":{
node("specifice-label"){
//fetch souces code and test.
//compile sources
//install dependencies
// start JMeter-server
//get IP Address
LIST_IP_ADDRESS_NODES.add(current_ip)
}
},
"node2":{
node("specifice-label"){
//fetch souces code and test.
//compile sources
//install dependencies
// start JMeter-server
//get IP Address
LIST_IP_ADDRESS_NODES.add(current_ip)
}
}
}
stage("Run-Jmeter-Test"){
parallel "node1":{
node("specific-label"){
//run jmeter.sh with the list of IP address of nodes in stage1.
}
},
"node2":{
node("specific-label"){
waitUntil {
// check if JMeter-master is finished.
}
}
}
}
}
问题是如何确保stage2中分配的节点与stage1中的节点相同?如果另一个并发作业分配具有specific-label
在 stage1 中设置的标签的一些节点,则管道将失败,因此 stage2 将分配一些干净的节点并且无法运行测试。
我猜想当带有标签的节点数量多于管道所需的 2 个节点时,在 stage1 和 stage2 中分配不同节点的概率可能会增加,specific-label
并且更频繁地导致管道故障。所以我想知道是否有类似lock
编程语言的机制可以锁定stage1中的节点并保留节点以供stage2使用。
谢谢。