如何告诉jenkins在multijob项目中成功执行作业后不要杀死进程?

时间:2016-08-26 15:10:21

标签: jenkins

我有一个jenkins multijob项目

在第一阶段,我启动数据库并构建核心部分。

示例shell命令启动Mongodb:

/root/software/mongodb-linux-x86_64-2.6.3/bin/mongod&

在第二阶段,我有各种各样的工作来建立一些客户。

第一阶段工作后,启动服务器并构建核心部分。我看到了日志 -

Process leaked file descriptors. See http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build for more information
2016-08-26T20:23:00.815+0530 [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends
2016-08-26T20:23:00.833+0530 [signalProcessingThread] now exiting
2016-08-26T20:23:00.879+0530 [signalProcessingThread] dbexit: 
2016-08-26T20:23:00.903+0530 [signalProcessingThread] shutdown: going to close listening sockets...
2016-08-26T20:23:00.903+0530 [signalProcessingThread] closing listening socket: 7
2016-08-26T20:23:00.903+0530 [signalProcessingThread] closing listening socket: 8
2016-08-26T20:23:00.903+0530 [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock
Finished: SUCCESS

这将停止所有数据库,并且构建对于阶段2作业失败。

如何告诉詹金斯不要在工作后杀死进程?

4 个答案:

答案 0 :(得分:6)

Jenkins使用特殊机制来清理子进程。它查找BUILD_ID与内部版本号匹配的进程。您可以将其设置为不同的值,jenkins将跳过查杀过程。

来自文档..

https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller

BUILD_ID=dontKillMe /your/mongodb/process

答案 1 :(得分:1)

任何人面临同样的问题并使用管道项目,请设置JENKINS_NODE_COOKIE而不是BUILD_ID

不要浪费时间设置HUDSON_COOKIEHUDSON_SERVER_COOKIEJENKINS_COOKIEJENKINS_SERVER_COOKIE。它们都不适用于管道项目。

有关详细信息,请参阅https://issues.jenkins-ci.org/browse/JENKINS-28182

来源:https://devops.stackexchange.com/questions/1473/running-a-background-process-in-pipeline-job/1513#1513

答案 2 :(得分:0)

根据@jayan分享的文档,

您可以通过将名为hudson.util.ProcessTree.disable的Java属性设置为值true来禁用在构建期间由作业生成的查杀过程

这可以作为" java"的参数来完成。启动Jenkins时的二进制文件:

 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

答案 3 :(得分:0)

首先,在shell脚本中更新您的手动启动或停止命令,并在Jenkins管道脚本中使用以下行。

sh script: "JENKINS_NODE_COOKIE=dontKillMe && sh script.sh"