Дженкинс выполняет скрипт nohup после сборки, передний план не выходит

задняя часть Jenkins
Дженкинс выполняет скрипт nohup после сборки, передний план не выходит

Эта статья участвовала в третьем этапе курса «High Yield Update» тренировочного лагеря для создателей Nuggets. Подробнее см.:Dig Li Project | Идет третий этап тренировочного лагеря создателя, «написание» личного влияния.

Знакомство с Дженкинсом

Автоматическое развертывание Jenkins может решать повторяющиеся задачи, такие как интеграция, тестирование и развертывание, при этом эффективность интеграции инструментов значительно выше, чем ручных операций, а непрерывная интеграция позволяет получать информацию об изменениях кода раньше, благодаря чему он может раньше вступить в фазу тестирования. и В случае обнаружения проблем стоимость их решения будет значительно снижена: непрерывная интеграция сокращает время от разработки, интеграции, тестирования и развертывания, тем самым сокращая время ожидания в середине; непрерывная интеграция также означает разработку, интеграцию, тестирование и развертывание продолжается.

Jenkins — это инструмент непрерывной интеграции с открытым исходным кодом, написанный на Java. Официальный сайт:jenkins.io

Jenkins может отслеживать проблемы, существующие в процессе непрерывной интеграции, в режиме реального времени, предоставлять подробные файлы журналов и функции напоминаний, а также визуально отображать тенденцию и стабильность построения проекта в виде диаграмм.

1 Содержание сценария

#!/bin/bash
cat /dev/null > nohup.out
NUM=`netstat -tunlp | grep 8000 | wc -l`
if [ ${NUM} -eq 0 ];then
echo "Service not start.starting......."
    nohup python36 /data/webPage/manage.py runserver 0.0.0.0:8000 &
else
  echo "Service already run on 0.0.0.0:8000"
fi

Содержание скрипта очень простое.Он должен определить, прослушивается ли порт 8000. Если он не прослушивается, попробуйте запустить службу.Если он прослушивает, он может завершиться нормально.

2 вопроса

После того, как Jenkins соберет и извлечет код, передайте код черезPublish Vver SSHКогда подключаемый модуль загружается на бизнес-машину, а затем выполняется сценарий, команда nohup в сценарии не может нормально завершиться, что приводит к зависанию внешнего интерфейса задачи сборки. Как показано на рисунке:

3 Проверить

Поинтересовавшись, я обнаружил:

Поскольку вы выполняете сценарий из среды, отличной от TTY, Jenkins не может правильно выйти из вашего сценария. Вам нужно выйти сразу после выполнения сценария! Не нужно ждать всего тайм-аут, а затем неправильное отключение!

означает:

Выполнять сценарии из среды, отличной от tty; Jenkins не может корректно выйти из вашего сценария

4 Решено

Использование Exec в PTY

Хотя сборка завершена,служба не запускается, вероятная причина в том, что при выполненииopenapi startПри запуске команды pty (псевдотерминал) отключается,

Решение,добавить nohup Пусть шаги выполняются в фоновом режиме, то есть даже если псевдотерминал отключен, проект все равно можно запустить и завершить.