Jenkins pipeline sh step returns error "process apparently never started"

9/7/2019

I am stuck in trying to get a Jenkinsfile to work. It keeps failing on sh step and gives the following error

    process apparently never started in /home/jenkins/workspace
    ...
    (running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)

I have tried adding

withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin'])

before sh step in groovy file

also tried to add

/bin/sh 

in Manage Jenkins -> Configure System in the shell section

I have also tried replacing the sh line in Jenkinsfile with the following:

sh "docker ps;"
sh "echo 'hello';"
sh ./build.sh;"
sh ```
#!/bin/sh
echo hello
```

This is the part of Jenkinsfile which i am stuck on

node {
    stage('Build') {
        echo 'this works'
        sh 'echo "this does not work"'
    }
}

expected output is "this does not work" but it just hangs and returns the error above.

what am I missing?

-- Bilal Ahmad
jenkins
jenkins-pipeline
jenkins-plugins
kubernetes

2 Answers

9/7/2019

It turns out that the default workingDir value for default jnlp k8s slave nodes is now set to /home/jenkins/agent and I was using the old value /home/jenkins

here is the config that worked for me

containerTemplate(name: 'jnlp', image: 'lachlanevenson/jnlp-slave:3.10-1-alpine', args: '${computer.jnlpmac} ${computer.name}', workingDir: '/home/jenkins/agent')
-- Bilal Ahmad
Source: StackOverflow

2/24/2020

It is possible to get the same trouble with the malformed PATH environment variable. This prevents the sh() method of the Pipeline plugin to call the shell executable. You can reproduce it on a simple pipeline like this:

node('myNode') {
    stage('Test') {
        withEnv(['PATH=/something_invalid']) {
            /* it hangs and fails later with "process apparently never started" */
            sh('echo Hello!')
        }
    }
}

There is variety of ways to mangle PATH. For example you use withEnv(getEnv()) { sh(...) } where getEnv() is your own method which evaluates the list of environment variables depending on the OS and other conditions. If you make a mistake in the getEnv() method and PATH gets overwritten you get it reproduced.

-- Alexander Samoylov
Source: StackOverflow