Question Démarrer un processus permanent dans une étape de construction de Jenkins?


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

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

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

Quelles sont les causes de ce comportement et comment puis-je y remédier?


14
2018-04-25 15:10


origine




Réponses:


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

Ceci peut être désactivé en réglant la BUILD_ID variable d'environnement à autre chose:

export BUILD_ID=dontKillMe

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


26
2018-04-25 18:45



Est-ce une façon «propre» de faire ou quelque chose d'autre est recommandé? - Patrick
Pour autant que je sache, c’est le seul moyen de désactiver le 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, je me suis arrêté [ssh-agent] Stopped. Mais il est toujours en train d'être tué :( - Amit Kumar Gupta


La question est assez ancienne, mais je pense que la solution est meilleure.

Utilisation Plug-in de script post-construction

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 à tripoter les variables d'environnement. Cela me semble un peu mieux.


1
2018-01-23 11:43





Dans les nouveaux travaux Pipeline, définissez BUILD_ID ne fonctionne plus. Au lieu de cela, vous devez définir JENKINS_NODE_COOKIE pour empêcher Jenkins de tuer votre processus lorsque le travail est terminé.

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.


0
2018-02-09 19:56