Jenkins 管道 sh 步骤 returns 错误 "process apparently never started"

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

我一直在尝试让 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'])

在 sh 进入 groovy 文件之前

也尝试添加

/bin/sh 

Manage Jenkins -> Configure System 在 shell 部分

我还尝试用以下内容替换 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"'
    }
}

预期输出是 "this does not work" 但它只是挂起并且 returns 上面的错误。

我错过了什么?

事实证明,默认 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')

格式错误的 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 被覆盖,您将重现它。