Как выделить одни и те же узлы с указанными метками c на разных этапах в конвейере jenkins - PullRequest
0 голосов
/ 13 апреля 2020

Мне нужно выделить одни и те же узлы на разных этапах в конвейере 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.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Возможно, вы захотите изучить декларативный конвейер, в котором все этапы, которые не требуют конкретного узла, могут выполняться на одном и том же узле, выделенном для родительских узлов этих этапов. См. Например здесь .

В вашем случае это может выглядеть примерно так:

pipeline {
    agent none
    stages {
        stage('Run Tests') {
            parallel {
                stage('Node1') {
                    agent {
                        label "specifice-label" // here node is selected
                    }
                    stages {
                         stage('Start') {  // this will run on the node selected above 
                              steps { 
                                 // fetch/compile/install/start JMeter
                              }
                         }
                         stage('Test') {  // this will run on the same node 
                              steps { 
                                 // run jmeter
                              }
                         }

                    }
                }
                stage('Node2') {
                    agent {
                        label "specifice-label" // this will select another node
                    }
                    // same as above 
                }
            }
        }
    }
}
0 голосов
/ 13 апреля 2020

Просто ограничивает количество одновременных заданий для узлов до 1, и после выполнения "других параллельных заданий" будет стоять в очереди до завершения текущего теста или наоборот

Manage Jenkins > Nodes > specifice-label > Configure > # of executors

Если вам нужна большая гибкость, вы можете проверить, свободен ли порт 1099 (или какой-либо другой порт, указанный вами через свойство server_port ), а если нет - уже существует JMeter Ведомый процесс работает на узле.

Дополнительная информация: Как выполнить распределенное тестирование в JMeter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...