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

Попытка перезапустить 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-файл с pid внутри, но процесс не существует.

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

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


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

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

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

решение1

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

Что касается проблемы отсутствия отображения переменных окружения, я ссылаюсь на это: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 есть свой пользователь (и группа). Теперь дерево процессов tomcat инициируется /sbin/init. Теперь gitlab-runner больше не знает об этом процессе или не может его убить. В любом случае tomcat продолжает работать после остановки runner.

решение2

Для этого достаточно просто отказать в доступе к вашему процессу, например tomcat (напишите это в вашем .gitlab-ci.yml):

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

Связанный контент