Einen Ewigen Prozess in einem Jenkins-Build-Schritt starten?

17

Ich führe am Ende einer Jenkins-Bereitstellung einen Shell-Befehl aus, um ein Forever-Skript neu zu starten:

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

Wenn ich das als Benutzer jenkins starte, funktioniert alles einwandfrei und die Konsolenausgabe aus dem Build-Verlauf sagt mir auch, dass das forever-Skript ausgeführt wird. Der Prozess wird jedoch sofort beendet, nachdem die Bereitstellung abgeschlossen und der Ewige Prozess gestoppt wurde.

Was verursacht dieses Verhalten und wie kann ich es beheben?

Patrick
quelle

Antworten:

28

Jenkins beseitigt alle durch den Job verursachten Prozesse.

Dies kann deaktiviert werden, indem die BUILD_IDUmgebungsvariable auf einen anderen Wert gesetzt wird:

export BUILD_ID=dontKillMe

Weitere Informationen finden Sie unter https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller

rcomblen
quelle
1
Ist dies eine "saubere" Vorgehensweise oder wird etwas anderes empfohlen?
Patrick
Soweit ich weiß, ist dies die einzige Möglichkeit, den ProcessTreeKiller
rcomblen 26.04.13
rcomblen ist korrekt, check out wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller
Jan Molak
Vorher habe ich bekommen. [SSH-Agent] Angehalten. Von Signal 15 getötet. Von Signal 15 getötet. Danach wurde [ssh-agent] gestoppt. Aber es wird immer noch getötet :(
Amit Kumar Gupta
1

Die Frage ist ziemlich alt, aber in diesem Fall gibt es meiner Meinung nach eine bessere Lösung.

Verwenden Sie das Post-Build-Skript-Plug-In

Das Plugin selbst wird seit Anfang 2016 nicht aktualisiert, erledigt aber die Aufgabe und Sie müssen nicht mit Umgebungsvariablen herumspielen. Scheint mir ein bisschen ordentlicher.

Matewilk
quelle
0

In den neuen Pipeline-Jobs BUILD_IDfunktioniert die Einstellung nicht mehr. Stattdessen müssen Sie festlegen JENKINS_NODE_COOKIE, dass Jenkins Ihren Prozess nach Beendigung des Jobs nicht beendet.

sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'

Oder selektiver:

sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'

Siehe das Wiki auf ProcessTreeKiller und diesen Kommentar im Jenkins Jira .

jpyams
quelle
0

Versuche es mit:

(
  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
quelle