无法在 Jenkins 管道的后台启动 Jmeter-Server。获取 ConnectException

Unable to start the Jmeter-Server in background in Jenkins pipeline. Getting ConnectException

我需要实施分布式性能测试,以便在用户数量较多时并行启动多个从属节点。因此我想启动主节点和从节点。

我一直尝试在后台启动 jmeter-server,因为它必须在从属节点中保持 运行 以接收传入请求。

但是,我仍然无法在后台启动它。

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 &"
                            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)

我们无法在没有看到您的 nohup.out file 内容的情况下提供答案,该内容应该包含您的脚本输出。

盲拍:默认情况下,JMeter 在主从之间使用安全通信,因此您需要有一个 Java Keystore to contain certificates necessary for the requests encryption. The script is create-rmi-keystore.sh 并且需要在启动 JMeter Slave 之前启动并执行配置。

如果您不需要主从之间的加密通信,您可以关闭此功能,这样您就不会创建密钥库,可以通过添加以下 command-line 参数来完成:

server.rmi.ssl.disable=true

喜欢:

nohup jmeter-server -Jserver.rmi.ssl.disable=true &

或者将下一行添加到 user.properties 文件(位于 JMeter 安装的“bin”文件夹中)

server.rmi.ssl.disable=true

更多信息:

这是通过在节点阶段添加来解决的。

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 &