詹金斯管道sh步骤返回错误“进程显然从未启动”

时间:2019-09-07 09:21:38

标签: jenkins kubernetes jenkins-pipeline jenkins-plugins

我一直在努力让Jenkinsfile正常工作。它在sh步骤上一直失败,并给出以下错误

    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)

我尝试添加

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

在进入常规文件之前

还尝试添加

/bin/sh 

在外壳部分的Manage Jenkins -> Configure System

我还尝试用以下命令替换Jenkinsfile中的sh行:

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

这是我卡住的Jenkinsfile的一部分

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

预期的输出为“这不起作用”,但只是挂起并返回上面的错误。

我想念什么?

2 个答案:

答案 0 :(得分:1)

事实证明,默认jnlp k8s从属节点的默认workingDir值现在设置为/home/jenkins/agent,而我使用的是旧值/home/jenkins

这是对我有用的配置

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

答案 1 :(得分:1)

使用格式错误的PATH环境变量可能会遇到同样的问题。这样可以防止Pipeline插件的sh()方法调用Shell可执行文件。您可以在这样的简单管道上重现它:

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

有多种方式处理PATH。例如,您使用withEnv(getEnv()){sh(...)},其中getEnv()是您自己的方法,该方法根据OS和其他条件评估环境变量列表。如果您在getEnv()方法中犯了一个错误,并且PATH被覆盖,则会复制它。