Vous démarrez un processus pour toujours dans une étape de génération Jenkins?

17

J'exécute une commande shell à la fin d'un déploiement Jenkins pour redémarrer un script pour toujours:

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

Lorsque je l'exécute en tant qu'utilisateur jenkins, tout fonctionne correctement et la sortie de la console à partir de l'historique de génération me dit également que le script forever est en cours d'exécution. Cependant, le processus s'arrête juste après la fin du déploiement et le processus permanent est arrêté.

Qu'est-ce qui cause ce comportement et comment puis-je le corriger?

Patrick
la source

Réponses:

28

Jenkins tue tous les processus générés par le travail.

Cela peut être désactivé en définissant la BUILD_IDvariable d'environnement sur autre chose:

export BUILD_ID=dontKillMe

voir https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller pour plus de détails

rcomblen
la source
1
Est-ce une façon «propre» de faire ou quelque chose d'autre recommandé?
Patrick
Pour autant que je sache, c'est le seul moyen de désactiver ProcessTreeKiller
rcomblen
rcomblen est correct, consultez wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller
Jan Molak
Avant cela, je devenais. [ssh-agent] Arrêté. Tué par le signal 15. Tué par le signal 15. Après cela, j'ai obtenu [ssh-agent] Arrêté. Mais il est toujours en train d'être tué :(
Amit Kumar Gupta
1

La question est assez ancienne, mais il y a une meilleure solution dans ce cas je pense.

Utiliser le plug-in de script post-build

Le plugin lui-même n'est pas mis à jour depuis le début de 2016, mais il fait le travail et vous n'avez pas à jouer avec les variables d'environnement. Cela me semble un peu plus soigné.

matewilk
la source
0

Dans les nouveaux travaux Pipeline, la définition BUILD_IDne fonctionne plus. Au lieu de cela, vous devez définir JENKINS_NODE_COOKIEpour empêcher Jenkins de tuer votre processus lorsque le travail se termine.

sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'

Ou, plus sélectivement:

sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'

Voir le wiki sur ProcessTreeKiller et ce commentaire dans le Jenkins Jira .

jpyams
la source
0

Essayez avec:

(
  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
la source