2014-10-09 5 views
5

Как я могу запустить Jenkins экземпляр Tomcat после успешного развертывания?Перезапуск Tomcat после успешного развертывания с Jenkins

Я уже пробовал использовать пакетный скрипт, но экземпляр Tomcat убит, когда сборка завершена.

+0

Когда вы запускаете командный скрипт? Если вы это сделаете после «событий после сборки», это должно сработать. – Akhil

ответ

5

Ваш ответ лежит в Jenkins ProcessTreeKiller. A more detailed explanation here.

Это дизайнерское решение для уничтожения любых процессов, созданных сборкой для поддержания чистой среды. К сожалению, это означает, что вы не можете оставить процесс (например, Tomcat), запущенный после сборки.

Вы можете отключить эту функцию в глобальном масштабе (не рекомендуется), запустив Дженкинс так:
java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

Или вы можете отключить эту функцию на основе каждого случая, начав процесс с измененным переменным окружением:
BUILD_ID=dontKillMe ./catalina restart

Некоторые люди сообщают, однако, что изменение BUILD_ID не достаточно. Они рекомендуют также снятие с охраной:
JENKINS_COOKIE
JENKINS_SERVER_COOKIE

Edit:
Другим вопросом, который может быть в игре является то, что при подключении к удаленной оболочке, и начать процесс в этой удаленной сессии оболочки, один раз вы (Дженкинс) отключается, сеанс убит и все процессы, порожденные сеансом, также убиты. Чтобы обойти эту проблему, вам необходимо отключить процесс из сеанса оболочки.

Один из способов:

nohup ./catalina restart &

+0

Я уже использовал Jenkins ProcessTreeKiller с успехом. Когда я начал Jenkins с этим параметром, я не заметил разницы в поведении порожденных процессов. – Joachim

+0

Вы подключаетесь к удаленной оболочке? Отредактирован ответ на использование удаленной оболочки – Slav

1

Это, как я перезапустить Tomcat после развертывания через Дженкинс.

У меня есть два сервера DEV и QA, где мне нужно выполнить развертывание и перезагрузить tomcat. У меня есть Дженкинс, установленный на сервере DEV.

  1. Для начала вам необходимо установить Post build task Плагин в Дженкинсе.
  2. Затем создайте скрипт tomcat-restart.ksh на сервере, где вы установлен .. кот

#!/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

Перезапуск Tomcat на DEV сервере.

Поскольку Jenkins и Tomcat установлены на одном компьютере, я непосредственно вызываю сценарий.

В Дженкинс пойти Add post-build action и выбрать Post build task и в Script текстовое поле добавить следующее: /apps/apache/tomcat-restart.ksh

Перезапуск Tomcat в сервере QA.

Поскольку Jenkins установлен на другом сервере, я вызываю сценарий для перезапуска Tomcat через Secure Shell.

В Дженкинс, перейдите к окну post-build action выберите Post build task и в текстовом поле Script добавить следующее:
sshpass -p 'myPassword' ssh -tt [email protected] sudo sh /apps/apache/tomcat-restart.ksh

Вам необходимо установить sshpass, если его не установлена.

Если все пошло нормально, вы можете увидеть что-то подобное в своем журнале 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 

Надеюсь, это поможет.

Смежные вопросы