原因
Jenkins会在构建完成后使用processTreeKiller杀掉了所有子进程,而且这是Jenkins的默认行为。
解决办法
对于普通job
更改Jenkins的ProcessTreeKiller寻找的环境变量BUILD_ID
比如,启动Apache HTTP Server
BUILD_ID=dontKillMe /usr/apache/bin/httpd
又如启动Apache Tomcat
export EXEC=/home/toby/usr/apache-tomcat-8.5.54/bin/catalina.sh
$EXEC stop
sleep 5
BUILD_ID=dontKillMe $EXEC start
对于Jenkins Pipeline
使用 JENKINS_NODE_COOKIE
代替BUILD_ID
比如,启动Apache HTTP Server
JENKINS_NODE_COOKIE=dontKillMe /usr/apache/bin/httpd
又如启动Apache Tomcat
pipeline {
agent any
stages {
stage('build') {
steps {
sh '''
export EXEC=/home/toby/usr/apache-tomcat-8.5.54/bin/catalina.sh
$EXEC stop
sleep 5
JENKINS_NODE_COOKIE=dontKillMe $EXEC start
'''
}
}
}
}