Разверните войну для кота

За последние 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.