记录个问题,jenkins 成功执行了脚本,但是后台却未见服务进程。
还原经过
设置如下:
jenkins 构建时,shell 基本操作都执行 ok(创建文件夹,目录切换),同时 xx.sh 脚本也正常运行,所有输出都打在 jenkins 的控制台上。
蛋疼的事情来了,进到服务器却没有看到 xx.sh 脚本启动的新服务。可是控制台却告诉我服务启动成功的(一个黑人脸)
原因
也不知道怎么去百度这个问题,好在看到 google 2 篇文章基本知道了原由所在。
原链接如下,相同问题的道友可以直接看下:
Jenkins 中通过 execute shell 无法启动进程-解决方案合集
jenkins 自动部署中执行 shell 脚本启动 tomcat,但是 tomcat 不启动的问题
To reliably kill processes spawned by a job during a build, Jenkins contains a bit of native code to list up such processes and kill them. This is tested on several platforms and architectures, but if you find a show-stopper problem because of this, you can disable this feature by setting a Java property named “hudson.util.ProcessTree.disable” to the value “true”.
大概是:在 job 构建时会杀掉进程,我们如上写的 shell 脚本相当于在 jenkins 提供的容器环境中执行,完事后 jenkins 就会回收掉。如果想要避免就要按照 jenkins 提供的参数,设置 hudson.util.ProcessTree.disable 为 true 解决。
1 | java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war |
当然在没有找到这个原因时,我这边通过其他方式解决,如果官方方式没有用的同学可以参考下:
利用 Send build artifacts over SSH
在该插件中,维护 Exec command 选项,输入需求的 sh 脚本即可。