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

Попытка перезапустить tomcat 8 с помощью gitlab-runner, файл pid создан, журнал пуст, сервер не запущен

Я пытаюсь перезапустить свой сервер Tomcat 8 после развертывания.

Настроить:

gitlab-runner работает с собственным пользователем (называемым gitlab-runner)

tomcat использует своего собственного пользователя по имени tomcat

  1. У sudoers есть запись, чтобы gitlab-runner мог запускать скрипт: gitlab-runner ALL=(tomcat) NOPASSWD: /home/tomcat/deploy.sh

  2. Сценарий развертывания просто копирует файл в каталог webapps, завершает работу Tomact и перезапускает его:

cd /home/tomcat/bin sh catalina.sh stop -force ... sh catalina.sh start

Когда я запускаю скрипт вручную от имени пользователя gitlab-runner, все работает нормально:

  1. sudo -u tomcat /home/tomcat/deploy.sh

Однако, когда задание запускается из gitlab-ci-multi-runner (с отправкой в ​​репозиторий gitlab), происходят следующие вещи. Gitlab-runner в основном пишет script.sh, который затем выполняет ту же команду сверху.

  1. Обычно, когда я запускаю tomcat, я вижу следующий вывод: Для выключения:

Using CATALINA_BASE: /home/tomcat/ Using CATALINA_HOME: /home/tomcat/ Using CATALINA_TMPDIR: /home/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /home/tomcat/bin/bootstrap.jar:/home/tomcat/bin/tomcat-juli.jar Using CATALINA_PID: /home/tomcat/bin/catalina.pid

Для запуска: Using CATALINA_BASE: /home/tomcat/ Using CATALINA_HOME: /home/tomcat/ Using CATALINA_TMPDIR: /home/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /home/tomcat/bin/bootstrap.jar:/home/tomcat/bin/tomcat-juli.jar Using CATALINA_PID: /home/tomcat/bin/catalina.pid Existing PID file found during start. Removing/clearing stale PID file. Tomcat started.

Когда я запускаю его с помощью gitlab-runner, нет вывода для выключения, но сервер выключается. Это действительно работает.

Только для стартапа Tomcat started. показывает.

  1. Файл pid создается с идентификатором внутри, но процесс не существует.

  2. Файлы журналов создаются, но они пусты.

Если я запускаю сервер в режиме отладки: sh catalina.sh jpda start файл log / catalina.out содержит всего одну строку: tomcat Listening for transport dt_socket at address: 8080


Я подумал, что окружающая среда другая, поэтому я проверил env cmd. Все равно, кроме TERM=unknown когда он запускается gitlab-runner.

У вас есть какие-нибудь подсказки, что может произойти в фоновом режиме, или что я могу проверить?

gitlab-runner имеет открытый исходный код, и сценарий, запускающий сценарий сборки, выглядит следующим образом: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/executors/shell/executor_shell.go#L36

Просто откажитесь от вашего процесса, например, tomcat (напишите это в своем .gitlab-ci.yml):

deploy_to_tomcat:
  stage: deploy
  script:
    - sudo /opt/apache-tomcat-7.0.77-dbservice/bin/startup.sh &
    - disown

Я наконец нашел решение, которое работает.

В связи с проблемой не отображения переменных среды я обращаюсь к этому: https://bz.apache.org/bugzilla/show_bug.cgi?id=37848 У gitlab-runner нет tty, поэтому вывод не отображается.

Причина неправильного запуска следующая: Заглянув в исходный код gitlab-runner, вы можете найти это: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/executors/shell/executor_shell.go#L84

В основном, как только gitlab-runner завершает работу, он убивает все оставшиеся процессы. Это означает, что в моем случае сервер фактически работал в течение короткого промежутка времени, прежде чем процесс был остановлен. Вот почему у меня есть пустые файлы журналов.

Я решил проблему, просто написав сценарий инициализации для запуска и выключения tomcat. У кота теперь есть собственный пользователь (и группа). Теперь дерево процессов tomcat инициируется / sbin / init. Теперь gitlab-runner больше не знает об этом процессе или не может его убить. В любом случае кот продолжает работать после остановки бегуна.