2014-10-09 12 views

Odpowiedz

5

Twoja odpowiedź znajduje się pod adresem Jenkins ProcessTreeKiller. A more detailed explanation here.

Jest to decyzja projektowa, aby zabić procesy, które są tworzone przez kompilację w celu utrzymania czystego środowiska. Niestety oznacza to, że nie można opuścić procesu (takiego jak Tomcat) uruchomionego po kompilacji.

można wyłączyć tę funkcję globalnie (nie zalecane) poprzez uruchomienie Jenkins tak:
java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

Albo można to wyłączyć dla poszczególnych przypadków, poprzez uruchomienie procesu w zmiennej środowiskowej Zmieniono:
BUILD_ID=dontKillMe ./catalina restart

Niektóre osoby zgłaszają, że zmiana BUILD_ID nie wystarczy. Zalecają oni także wyłączające:
JENKINS_COOKIE
JENKINS_SERVER_COOKIE

Edit:
Kolejną kwestią, która może być w grze jest to, że po podłączeniu do zdalnej powłoki, i rozpocząć proces w tej sesji zdalnej powłoki, raz ty (Jenkins) się rozłącza, sesja zostaje zabita, a wszystkie procesy zainicjowane przez sesję również zostają zabite. Aby obejść ten problem, należy odłączyć proces od sesji powłoki.

Jednym ze sposobów jest:

nohup ./catalina restart &

+0

Użyłem już Jenkins ProcessTreeKiller withouth success. Kiedy uruchomiłem Jenkins z tym parametrem, nie zauważyłem żadnej różnicy w zachowaniu procesów spawnowanych. – Joachim

+0

Czy łączysz się ze zdalną powłoką? Edytowano odpowiedź, aby uwzględnić zdalną powłokę – Slav

1

To jak ja ponownym uruchomieniu Tomcat po wdrożeniu przez Jenkinsa.

Mam dwa serwery DEV i QA, gdzie muszę wykonać wdrożenie i ponownie uruchomić kocur. Mam zainstalowanego Jenkinsa na serwerze DEV.

  1. Najpierw musisz zainstalować Post build task Plugin w Jenkins.
  2. Następnie należy utworzyć skrypt tomcat-restart.ksh w serwerze, na którym masz zainstalowany Tomcat ..

#!/bin/bash echo "*********************Restarting Tomcat70.******************" sh /apps/apache/sss-tomcat70.ksh status echo "Trying to stop Tomcat." sh /apps/apache/sss-tomcat70.ksh stop echo "Getting Tomcat Status." sh /apps/apache/sss-tomcat70.ksh status echo "Trying to Start Tomcat" sh /apps/apache/sss-tomcat70.ksh start sleep 2 echo "Getting Tomcat Status" sh /apps/apache/sss-tomcat70.ksh status

Ponowne uruchomienie na serwerze Tomcat Dev.

Ponieważ Jenkins i Tomcat są zainstalowane na tym samym komputerze, bezpośrednio wywołuję skrypt.

W Jenkins iść do Add post-build action i wybierz Post build task aw Script tekstowym dodaj następujące: /apps/apache/tomcat-restart.ksh

Ponowne Tomcat serwer QA.

Ponieważ Jenkins jest zainstalowany na innym serwerze, wywołuję skrypt, aby ponownie uruchomić Tomcat przez Secure Shell.

W Jenkins przejdź do Dodaj post-build action wybierz Post build task aw polu tekstowym Script dodać następujące:
sshpass -p 'myPassword' ssh -tt [email protected] sudo sh /apps/apache/tomcat-restart.ksh

Musisz zainstalować sshpass jeśli jej nie już zainstalowany.

Jeśli wszystko poszło dobrze, możesz zobaczyć coś takiego w swoim dzienniku Jenkins.

Running script : /apps/apache/tomcat-restart.ksh 
[workspace] $ /bin/sh -xe /tmp/hudson43653169595828207.sh 

+ /apps/apache/tomcat-restart.ksh 
*********************Restarting Tomcat70.********************* 
Tomcat v7.0 is running as process ID 3552 
*********************Trying to stop Tomcat.********************* 
Stopping Tomcat v7.0 running as process ID 3552... 
*********************Getting Tomcat Status.********************* 
Tomcat v7.0 is not running 
*********************Trying to Start Tomcat********************* 
Starting Tomcat v7.0 server... 

*********************Getting Tomcat Status********************* 
Tomcat v7.0 is running as process ID 17969 

Mam nadzieję, że to pomoże.

Powiązane problemy