¿Iniciar un proceso para siempre en un paso de compilación de Jenkins?

17

Estoy ejecutando un comando de shell al final de una implementación de Jenkins para reiniciar un script para siempre:

npm install && forever stop app.js && forever start -a -l /var/log/forever.log app.js

Cuando ejecuto eso como usuario, jenkins todo funciona bien y la salida de la consola del historial de compilación también me dice que el script forever se está ejecutando. Sin embargo, el proceso se detiene justo después de que finaliza la implementación y se detiene el proceso permanente.

¿Qué causa este comportamiento y cómo puedo solucionarlo?

Patricio
fuente

Respuestas:

28

Jenkins mata todos los procesos generados por el trabajo.

Esto se puede deshabilitar configurando la BUILD_IDvariable de entorno a otra cosa:

export BUILD_ID=dontKillMe

ver https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller para más detalles

rcomblen
fuente
1
¿Es esta una forma "limpia" de hacer o algo más recomendado?
Patrick
Hasta donde sé, es la única forma de deshabilitar ProcessTreeKiller
rcomblen el
Antes de esto me estaba poniendo. [ssh-agent] Detenido. Asesinado por la señal 15. Asesinado por la señal 15. Después de esto obtuve [ssh-agent] Detenido. Pero todavía está siendo asesinado :(
Amit Kumar Gupta
0

En los nuevos trabajos de canalización, la configuración BUILD_IDya no funciona. En su lugar, debe configurarlo JENKINS_NODE_COOKIEpara evitar que Jenkins mate su proceso cuando finalice el trabajo.

sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'

O, más selectivamente:

sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'

Vea la wiki en ProcessTreeKiller y este comentario en Jenkins Jira .

jpyams
fuente
0

Probar con:

(
  set -e
  export BUILD_ID=dontKillMe
  export JENKINS_NODE_COOKIE=dontKillMe
  npm install
  forever stop app.js
  forever start -a -l /var/log/forever.log app.js &
) &
Eduardo Cuomo
fuente