Я пытаюсь перезапустить своего кота 8 серверов после развертывания.
Установка:
gitlab-бегун работает с его собственным пользователем (названный gitlab-бегуном)
кот использует своего собственного пользователя, названного котом
sudoers имеет запись так, чтобы gitlab-бегун мог запустить скрипт: gitlab-runner ALL=(tomcat) NOPASSWD: /home/tomcat/deploy.sh
Развернуть сценарий просто копирует файл в каталог веб-приложений, закрывает кота и перезапускает его:
cd /home/tomcat/bin sh catalina.sh stop -force ... sh catalina.sh start
Когда я запускаю скрипт вручную как пользователь gitlab-бегуна, все хорошо работает:
sudo -u tomcat /home/tomcat/deploy.sh
Однако, когда задание запускается с gitlab-ci-multi-runner (с нажатием в gitlab репозиторий), следующие вещи происходят. Gitlab-бегун в основном пишет script.sh, который затем выполняет ту же команду сверху.
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-бегуна нет никакого вывода для завершения работы, но сервер закрывается. Это на самом деле работает.
Для запуска только Tomcat started.
шоу.
Изодромный с предварением файл создается с pid внутри, но процесс не существует.
Файлы журнала создаются, но они пусты.
Если я запускаю сервер в режиме отладки: sh catalina.sh jpda start
файл log/catalina.out просто conatains одна строка: tomcat Listening for transport dt_socket at address: 8080
Моя мысль была то, что среда отличается, таким образом, я сверился env
cmd. Все равно за исключением того, что TERM=unknown
когда это запускается gitlab-бегуном.
У Вас есть какие-либо подсказки, что могло бы происходить в фоновом режиме или просто вещи, которые я мог протестировать?
gitlab-бегун является открытым исходным кодом и сценарием, который запускается, сценарий сборки - это: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/executors/shell/executor_shell.go#L36
Наконец-то я нашел решение, которое работает.
Что касается проблемы с отображением переменных среды, я обращаюсь к этому: 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 больше не знает об этом процессе или не может его убить. В любом случае кот продолжит работу после остановки бегуна.
Просто откажитесь от вашего процесса, например, tomcat (напишите это в своем .gitlab-ci.yml
):
deploy_to_tomcat:
stage: deploy
script:
- sudo /opt/apache-tomcat-7.0.77-dbservice/bin/startup.sh &
- disown