Скрипт удаленного развертывания Tomcat manager - PullRequest
36 голосов
/ 13 декабря 2010

Я пишу сценарий оболочки для автоматического развертывания / отмены развертывания с помощью менеджера tomcat.

Следуя инструкциям на http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Deploy_A_New_Application_Remotely, Я использую curl для своего развертывания

curl --anyauth -u username:pwd -d path=/something -d war=file:target/someWar.war https://someurl.com/manager/deploy

И я получаю ответ о том, что метод HTTP POST не поддерживается этим URL.

Так что я изменил свой локон, чтобы получить использование, используя -G

curl --anyauth -u username:pwd -G -d path=/something -d war=file:target/someWar.war https://someurl.com/manager/deploy

Я получил ответ FAIL - Не удалось развернуть приложение по контекстному пути / что-то, и он, похоже, ищет файл локально на сервере, а не на моей машине. Существуют плюсы, которые делают удаленное развертывание без необходимости просматривать файл, поэтому мне интересно, что мне не хватает.

В настоящее время у меня нет идей (на странице конфигурации менеджера tomcat нет других опций).

Ответы [ 5 ]

48 голосов
/ 13 ноября 2012

Предоставление обновления для этого вопроса.

Tomcat 7 изменил API своего менеджера.

Пожалуйста, обратитесь к: Диспетчер команд

Следующий новый шаблон URL:

http://{host}:{port}/manager/text/{command}?{parameters}

Пример

curl -T "myapp.war" "http://manager:manager@localhost:8080/manager/text/deploy?path=/myapp&update=true"

Безопасность

Имейте в виду, что сервер должен принимать ваш удаленный IP-адрес. Это пример конфигурации:

<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/manager">
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.0\.0\.1" />
</Context>

Это необязательный параметр, который не обязателен, но наличие роли кросс-домена и надлежащих учетных данных менеджера является обязательным.

Tomcat 8 - применяются те же правила, что и Tomcat 7. Те же команды.

Вот полная документация:

http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html

40 голосов
/ 07 марта 2011

Этот способ работает для меня на Tomcat 6 (см. Ответ разработчика на tomcat 7):

curl --upload-file <path to warfile> "http://<tomcat username>:<tomcat password>@<hostname>:<port>/manager/deploy?path=/<context>&update=true"

Пример:

curl --upload-file target\debug.war "http://tomcat:tomcat@localhost:8088/manager/deploy?path=/debug&update=true"

Очень легко, peasy. Вывод выглядит так:

OK - Undeployed application at context path /debug
OK - Deployed application at context path /debug
3 голосов
/ 17 августа 2015

Для тех, кто использует Jenkins и хочет развернуть с помощью сценария оболочки в GitBash на компьютере под управлением Windows вместо подключаемого модуля Jenkins

tomcat_host=192.10.10.100
tomcat_port=8080
tomcat_username=admin
tomcat_password=12345

context_path=myApplication

curl -v -u ${tomcat_username}:${tomcat_password} -T ${artifact} 'http://'${tomcat_host}':'${tomcat_port}'/manager/text/deploy?path=//'${context_path}''

Примечание:

  1. опция curl -vявляется многословным (необязательно)
  2. // две прямые косые черты, прежде чем контекстный путь будет работать для GitBash на компьютере Windows (/ одиночная прямая косая черта не будет каким-либо образом)
  3. Также при развертывании на удаленном сервере,рассмотреть ваш брандмауэр, да!
1 голос
/ 03 июня 2016

Улучшение Jet ответа, это работает для меня в Tomcat 8, Java 64 бит.

Это было то, что я выполняю:

curl -v -u some_user:some_password -T /../my_app.war 'http://127.0.0.1:tomcat_port/manager/text/deploy?path=/my_app&update=true'

Это будет работать, если мы настроим пользователей tomcat в:

/.../.../apache-tomcat-8.5.0_001/conf/tomcat-users.xml

с:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>

<user username="some_user" password="some_password" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>

Перезапустите Tomcat, и он будет готов к развертыванию войн с удаленных клиентов, таких как curl, jenkins, travis и т. Д.

1 голос
/ 14 декабря 2010

Самый простой способ развернуть приложение - это написать скрипт Ant.Единственное, что вам нужно (кроме Ant) - это catalina-ant.jar для присутствия в пути к классам.

Ознакомьтесь с этой главой руководства: http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Executing_Manager_Commands_With_Ant

Сценарийвыполняет аналогичные действия: использует HTTP для развертывания вашего .war в приложение менеджера.Возможно, вы даже захотите захватить пакеты, чтобы увидеть точные заголовки, если вы все еще хотите использовать curl.Я бы не рекомендовал curl, так как я думаю, что решение Ant более переносимо и подвержено ошибкам (например, что если они изменят API развертывания низкого уровня?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...