Невозможно запустить Jmeter-сервер в фоновом режиме в конвейере Jenkins. Получение ConnectException

#jenkins #jmeter #jenkins-pipeline

#дженкинс #jmeter #дженкинс-конвейер

Вопрос:

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

Я пробовал весь способ запуска jmeter-сервера в фоновом режиме, поскольку он должен продолжать работать на подчиненном узле для получения входящего запроса.

Но все же я не могу запустить его в фоновом режиме.

 node(performance) {
    properties([disableConcurrentBuilds()])
    stage('Setup') {
        cleanAndInstall()
        checkout()
    }
    max_instances_to_boot = 1
    for (val in 1..max_instances_to_boot) {
        def instance_id = val
        node_builder[instance_id] = {
            timestamps {
                node(node_label) {
                    stage('Node -> '   instance_id   ' Launch') {
                        def ipAddr = ''
                        script {
                            ipAddr = sh(script: 'curl http://xxx.xxx.xxx.xxx/latest/meta-data/local-ipv4', returnStdout: true)
                            node_ipAddr.add(ipAddr)
                        }
                        cleanAndInstall()
                        checkout()
                        println "Node IP Address:" node_ipAddr
                        dir('apache-jmeter/bin') {
                            exec_cmd = "nohup sh jmeter-server -Jserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=$ipAddr > ${env.WORKSPACE}/jmeter-server-nohup.out amp;"
                            println 'Server Execution Command: '   exec_cmd
                            sh exec_cmd
                        }
                        sleep time: 1, unit: 'MINUTES'
                        sh """#!/bin/bash
                              echo "============ jmeter-server.log ============"
                              cat jmeter-server.log
                              echo "============ nohup.log ============"
                              cat jmeter-server-nohup.out
                           """
                    }
                }
            }
        }
    }
    parallel node_builder
    stage('Execution') {
        exec_cmd = "apache-jmeter/bin/jmeter -n -t /home/jenkins/workspace/release-performance-tests/test_plans/delights/fd_regression_delight.jmx -e -o /home/jenkins/workspace/release-performance-tests/Performance-Report -l /home/jenkins/workspace/release-performance-tests/JTL-FD-773.jtl -R xx.0.3.210 -Jserver.rmi.ssl.disable=true -Dclient.tries=3"
        println 'Execution Command: '   exec_cmd
        sh exec_cmd
    }
}
  

Получаю следующую ошибку

 Error in rconfigure() method java.rmi.ConnectException: Connection refused to host: xx.0.3.210; nested exception is: 
    java.net.ConnectException: Connection refused (Connection refused)
  

Комментарии:

1. Там, где я пытался без его использования nohub , все работает нормально.

Ответ №1:

Мы не можем предоставить ответ, не увидев содержимое вашего файла nohup.out, который должен содержать выходные данные вашего скрипта.

Слепой выстрел: по умолчанию JMeter использует безопасную связь между ведущим и подчиненными устройствами, поэтому вам необходимо иметь хранилище ключей Java для хранения сертификатов, необходимых для шифрования запросов. Сценарий create-rmi-keystore.sh и вам необходимо запустить и выполнить настройку перед запуском подчиненного устройства JMeter.

Если вам не нужна зашифрованная связь между ведущим и подчиненными устройствами, вы можете отключить эту функцию, чтобы не создавать хранилище ключей, это можно сделать либо путем добавления следующего аргумента командной строки:

 server.rmi.ssl.disable=true
  

Нравится:

 nohup jmeter-server -Jserver.rmi.ssl.disable=true amp;
  

или, в качестве альтернативы, добавьте следующую строку в файл user.properties (находится в папке «bin» вашей установки JMeter)

 server.rmi.ssl.disable=true
  

Дополнительная информация:

Комментарии:

1. Дмитрий, это содержимое, доступное в nohub.out Created remote object: UnicastServerRef2 [liveRef: [endpoint:[xx.0.3.210:44795](local),objID:[-794e5958:175a1502d58:-7fff, 1938170908024818443]]]

Ответ №2:

Это решается путем добавления внутри этапа узла.

 JENKINS_NODE_COOKIE=dontKillMe nohup sh jmeter-server -Jserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=xx.xx.xx.xxx > ${env.WORKSPACE}/jmeter-server-nohup.out amp;