Назад | Перейти на главную страницу

Запускать вечный процесс на этапе сборки Jenkins?

Я запускаю команду оболочки в конце развертывания 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 &
) &