Я запускаю команду оболочки в конце развертывания Jenkins, чтобы перезапустить сценарий навсегда:
npm install && forever stop app.js && forever start -a -l /var/log/forever.log app.js
Когда я запускаю это как пользователь jenkins, все работает нормально, и вывод консоли из истории сборки также сообщает мне, что скрипт forever работает. Однако процесс останавливается сразу после завершения развертывания, и процесс навсегда останавливается.
Что вызывает такое поведение и как его исправить?
Дженкинс убивает все процессы, порождаемые работой.
Это можно отключить, установив BUILD_ID
переменная среды на что-то еще:
export BUILD_ID=dontKillMe
видеть https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller для подробностей
Вопрос довольно старый, но я думаю, что в этом случае есть лучшее решение.
Использовать Подключаемый модуль Post-Build Script
Сам плагин не обновляется с начала 2016 года, но он выполняет свою работу, и вам не нужно возиться с переменными среды. Мне это кажется немного более аккуратным.
В новых заданиях конвейера настройка BUILD_ID
больше не работает. Вместо этого вам нужно установить JENKINS_NODE_COOKIE
чтобы Дженкинс не убил ваш процесс по завершении работы.
sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'
Или, более избирательно:
sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'
Видеть вики на ProcessTreeKiller и этот комментарий в Jenkins Jira.
Попробуйте:
(
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 &
) &