Starting a forever process in a Jenkins build step?
I'm running a shell command at the end of a Jenkins deployment to restart a forever script:
npm install && forever stop app.js && forever start -a -l /var/log/forever.log app.js
When I run that as a user jenkins everything works fine and the console output from the build history also tells me that the forever script is running. However, the process stops right after the deployment is finished and the forever process is stopped.
What causes this behavior and how can I fix it?
Solution 1:
Jenkins kills all process spawn by the job.
This can be disabled by setting the BUILD_ID
environment variable to something else:
export BUILD_ID=dontKillMe
see https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller for details
Solution 2:
In the new Pipeline jobs, setting BUILD_ID
no longer works. Instead, you need to set JENKINS_NODE_COOKIE
to prevent Jenkins from killing your process when the job finishes.
sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'
Or, more selectively:
sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'
See the wiki on ProcessTreeKiller and this comment in the Jenkins Jira.
Solution 3:
The question is quite old, but there is a better solution in this case I think.
Use Post-Build Script Plug-In
The plugin itself is not updated since the beginning of 2016, but it does the job and you do not have to fiddle with environment variables. Seems a bit neater to me.