Как я могу запустить Jenkins экземпляр Tomcat после успешного развертывания?Перезапуск Tomcat после успешного развертывания с Jenkins
Я уже пробовал использовать пакетный скрипт, но экземпляр Tomcat убит, когда сборка завершена.
Как я могу запустить Jenkins экземпляр Tomcat после успешного развертывания?Перезапуск Tomcat после успешного развертывания с Jenkins
Я уже пробовал использовать пакетный скрипт, но экземпляр Tomcat убит, когда сборка завершена.
Ваш ответ лежит в 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 &
Это, как я перезапустить Tomcat после развертывания через Дженкинс.
У меня есть два сервера DEV и QA, где мне нужно выполнить развертывание и перезагрузить tomcat. У меня есть Дженкинс, установленный на сервере DEV.
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
Надеюсь, это поможет.
Когда вы запускаете командный скрипт? Если вы это сделаете после «событий после сборки», это должно сработать. – Akhil