Разверните войну для кота
За последние 10 лет у меня была возможность развернуть веб-приложения в tomcat бесчисленное количество раз. Я также написал несколько сценариев, пытающихся сделать это автоматически, но никогда
удалось полностью автоматизировать его.
Вот проблема. Я пытаюсь развернуть новую войну с тем же именем, что и существующая война в webapps моего tomcat.
Вариант 1: наивный подход - просто скопируйте войну и дождитесь ее обновления взорванного каталога. Это иногда срабатывает. Много раз - взорванный каталог не обновляется в разумные сроки.
Вариант 2: сквозной подход - остановите tomcat, удалите все войны и временные файлы. скопируйте войну и запустите кота. Обычно это включает в себя остановку tomcat, ожидающую некоторое время, - и затем проверку, чтобы убедиться, что процесс все еще жив и убивает его.
Вариант 3: ручной подход. Это может быть удивительно, но я нашел, что он работает много раз - скопируйте войну, дождитесь, когда взорванный каталог будет обновлен, и как только это произойдет -
перезапустите tomcat. если это не так - вы можете попытаться удалить временные рабочие файлы, и это иногда помогает.
Я также пробовал много вариантов - с другим порядком и подмножеством действий - перезапускать, останавливать, удалять войну, удалять взорванные, удалять локальный контекст, удалять локальную рабочую директорию, копировать войну, спать, сравнивать даты, вежливо спрашивать tomcat перезагрузка и т.д. Ничто, казалось, просто не работает.
Это может быть что-то, что я делаю неправильно, но я слышал о том же опыте от многих людей, поэтому я здесь, чтобы получить совет - что скажешь? Каков наилучший способ развертывания новой войны с tomcat?
Спасибо!
Ответы
Ответ 1
вы можете легко автоматизировать это в оболочке script с curl
на tomcat 6:
curl --upload-file deployme.war "http://tomcat:[email protected]:8088/manager/deploy?path=/deployme&update=true"
на tomcat 7
curl -T "deployme.war" "http://tomcat:[email protected]:8080/manager/text/deploy?path=/deployme&update=true"
или через любой язык программирования. Я разместил решение на базе Java здесь
Ответ 2
Я склоняюсь к варианту 2. Если есть проект, над которым я работаю в идее, особенно с прикрепленным отладчиком, я нахожу, что в конечном итоге все начинает запутываться. Может быть, гонятся за красной селечкой в течение часа, прежде чем я обнаруживаю, что расчистка всего прочь заставляет проблему уйти. Тогда приятно иметь script на стороне, которую я могу иногда запускать, чтобы очистить все:
- сила выключения с тайм-аутом 60 с
- очистить журнал, temp, рабочие каталоги
- удалите папку webapp
- копировать в новый файл войны из местоположения сборки
- взорвать новый файл войны
- при необходимости запустите awk script, чтобы настроить значения, специфичные для машины, в файлах свойств (отсюда и предыдущий взрыв).
- с настройкой переменной среды CATALINA_PID (для включения силы выключения)
Обычно нормально выключается. Если нет, то обычно есть фоновый поток, который был запущен, но отсутствует крюк отключения (скажем, клиент с памятью), и его нужно преследовать. Обычно, похоже, просто опускается новая война. Но если в среде dev, script для полномасштабного перезапуска приятно.
Ответ 3
Cargo - http://cargo.codehaus.org/ - может использоваться для удаленного развертывания WAR файлов на несколько веб-контейнеров, включая Tomcat.
См. http://cargo.codehaus.org/Quick+start для примеров на Java. Ant и поддержка Maven также доступна.
Ответ 4
Я загружаю WAR в мой домашний каталог, cd в /usr/local/tomcat, затем запускаю следующие команды:
bin/shutdown.sh
rm webapps/ROOT.war
rm -rf webapps/ROOT
cp ~/ROOT.war webapps
bin/startup.sh
Достаточно легко автоматизировать, но я был слишком ленив (или не ленив), чтобы сделать это до сих пор.
Ответ 5
Я просто использую инструмент управления Tomcat, чтобы остановить процесс, удалить его и установить новую WAR. Легкий peasy.
Ответ 6
См. раздел "Развертывание с использованием пакета клиентского развертывателя"
Это в основном готовый ant script для выполнения общих операций развертывания tomcat.
http://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.html#Deploying_on_a_running_Tomcat_server