./jmeter: not found error when running Jmeter on Jenkins scripted pipeline

Viewed 195

I have a Jenkins pipeline for .Net Core REST API and I am getting an error on the command for executing Jmeter tests :

[Pipeline] { (Performance Test)
[Pipeline] sh
+ docker exec 884627942e26 bash
[Pipeline] sh
+ /bin/sh -c cd /opt/apache-jmeter-5.4.1/bin
[Pipeline] sh
+ /bin/sh -c ./jmeter -n -t /home/getaccountperftest.jmx -l /home/golide/Reports/LoadTestReport.csv -e -o /home/golide/Reports/PerfHtmlReport
-n: 1: -n: ./jmeter: not found
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Performance Test Report)
Stage "Performance Test Report" skipped due to earlier failure(s)

I have jmeter running as a Docker container on the server as per this guide Jmeter On Linux and I am able to extract the reports but this same command fails when I run within Jenkins context :

/bin/sh -c ./jmeter -n -t /home/getaccountperftest.jmx -l /home/golide/Reports/LoadTestReport.csv -e -o /home/golide/Reports/PerfHtmlReport

This is my pipeline :

  pipeline {
    agent any
    triggers {
        githubPush()
    }
    environment { 
     NAME = "cassavagateway"
       REGISTRYUSERNAME = "golide"
       WORKSPACE = "/var/lib/jenkins/workspace/OnlineRemit_main"
       VERSION = "${env.BUILD_ID}-${env.GIT_COMMIT}"
       IMAGE = "${NAME}:${VERSION}"
    }
        stages {        
                .....
                .....  
             stage ("Publish Test Report") {
                 steps{               
                         publishHTML target: [
          allowMissing: false,
            alwaysLinkToLastBuild: true,
              keepAll: true,
              reportDir: '/var/lib/jenkins/workspace/OnlineRemit_main/IntegrationTests/BuildReports/Coverage',
              reportFiles: 'index.html',
              reportName: 'Code Coverage'
              ]
                       archiveArtifacts artifacts: 'IntegrationTests/BuildReports/Coverage/*.*'
                       }
                 }
stage ("Performance Test") {
             steps{               
   sh 'docker exec 884627942e26 bash'
   sh '/bin/sh -c cd /opt/apache-jmeter-5.4.1/bin'
   sh '/bin/sh -c ./jmeter -n -t /home/getaccountperftest.jmx -l /home/golide/Reports/LoadTestReport.csv -e -o /home/Reports/HtmlReport'
   sh 'docker cp 884627942e26:/home/Reports/HtmlReport /var/lib/jenkins/workspace/FlexToEcocash_main/IntegrationTests/BuildReports/Coverage bash'           
               }
         }
         stage ("Publish Performance Test Report") {
             steps{               
          
      step([$class: 'ArtifactArchiver', artifacts: '**/*.jtl, **/jmeter.log'])
               }
         }
                      stage ("Docker Build") {
                    steps {
                       sh  'cd /var/lib/jenkins/workspace/OnlineRemit_main/OnlineRemit'
                       echo "Running ${VERSION} on ${env.JENKINS_URL}"              
                       sh "docker build -t ${NAME} /var/lib/jenkins/workspace/OnlineRemit_main/OnlineRemit"
                       sh "docker tag ${NAME}:latest ${REGISTRYUSERNAME}/${NAME}:${VERSION}"
                       
                    }
                 }        
                 stage("Deploy To K8S"){
                sh 'kubectl apply -f {yaml file name}.yaml'
                sh 'kubectl set image deployments/{deploymentName} {container name given in deployment yaml file}={dockerId}/{projectName}:${BUILD_NUMBER}'
          }
              }
        
        }

My issues : What doI need to change for that command to execute ? How can I incorporate a condition to break the pipeline if the tests fail?

Jenkins Environment : Debian 10 Platform : .Net Core 3.1

1 Answers
Related