我一直在努力让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"'
}
}
预期的输出为“这不起作用”,但只是挂起并返回上面的错误。
我想念什么?
答案 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被覆盖,则会复制它。