Мне нужно выделить одни и те же узлы на разных этапах в конвейере jenkins. Сценарий заключается в том, что мне нужно запустить распределенный тест JMeter, и я создаю конвейер следующим образом:
- stage1: параллельная настройка некоторых агентов, например, выборка исходного кода и тестов, компиляция исходников и установка зависимостей, запустите jmeter-сервер как процесс-демон, получите IP-адрес текущего узла.
- stage2: выделите те же узлы в stage1 и используйте один узел в качестве главного узла JMeter, в котором он передает список IP-адресов всех узлов в stage1 в 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.
}
}
}
}
}
проблема в том, как убедиться, что узлы, выделенные на этапе 2, являются одинаковыми узлами на этапе 1? конвейер потерпит неудачу, если другое параллельное задание выделит некоторые узлы с меткой specific-label
, установленной в stage1, следовательно, stage2 выделит некоторые чистые узлы и не сможет выполнить тесты.
Я полагаю, что вероятность выделения различных узлов на этапе 1 и этапе 2 может возрасти, когда имеется больше количества узлов с меткой specific-label
, чем для 2 узлов, требуемых конвейером, и чаще вызывает сбой конвейера. Поэтому мне интересно, есть ли такой механизм, как lock
в языке программирования, который может блокировать узлы на stage1 и резервировать узлы для использования на stage2.
Спасибо.