Сборка не будет завершена при запуске Java из Hudson "Execute shell" - PullRequest
0 голосов
/ 12 мая 2010

В рамках развертывания приложения я использую Hudson для запуска встроенного приложения на сервере удаленного выпуска. Это можно сделать, указав шаг после сборки с помощью параметра «Выполнить оболочку».

Я копирую сценарий deploy.sh на удаленный сервер и выполняю его через ssh, например,

scp /opt/myapp/deploy.sh myapp@myserver:/export/home/myapp/scripts/
ssh myapp@myserver "/export/home/myapp/scripts/deploy.sh"

Сценарий deploy.sh запускает приложение Java, а затем записывает PID в файл, например,

java -jar /opt/myapp/myapp.jar > /opt/myapp/myapp.log &
echo $! > /var/run/myapp/myapp.pid

(Примечание: до этого есть шаги - например, разархивировать пакет развертывания)

Странно то, что когда я запускаю сборку Hudson, она зависает после выполнения через SSH сценария deploy.sh. Приложение Java запускается и правильный PID записывается в файл. Похоже, что Хадсон не смог обнаружить, что сценарий завершен. Если я выберу шаг запуска Java, он не завершится без проблем.

Кто-нибудь может увидеть, что я пропустил?

Спасибо

Andrew

1 Ответ

1 голос
/ 12 мая 2010

При запуске фоновых процессов из сеанса SSH необходимо перенаправить все операции ввода-вывода фонового процесса. В противном случае SSH будет зависать на выходе.

Поэтому измените команду запуска Java на:

java -jar /opt/myapp/myapp.jar > /opt/myapp/myapp.log 2>&1 < /dev/null &
...