Подтвердить что ты не робот

Диспетчер удаленного управления Tomcat script

Я пишу оболочку script для автоматического развертывания/развертывания с помощью диспетчера 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 - Не удалось развернуть приложение по пути/чему-то контекста, и, похоже, он ищет файл локально на сервере вместо моей машины. Есть pluings, которые делают удаленное развертывание без необходимости scp файл, поэтому я задаюсь вопросом, что мне не хватает.

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

4b9b3361

Ответ 1

Этот способ работает на меня на 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:[email protected]:8088/manager/deploy?path=/debug&update=true"

Очень легкий peasy. Вывод выглядит следующим образом:

OK - Undeployed application at context path /debug
OK - Deployed application at context path /debug

Ответ 2

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

Tomcat 7 изменил API-интерфейс менеджера.

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

Следуя новому шаблону URL:

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

Пример

curl -T "myapp.war" "http://manager:[email protected]: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

Ответ 3

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

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}''

Примечание:

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

Ответ 4

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

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

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

Ответ 5

Улучшая ответ 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 и он будет готов развернуть войны от удаленных клиентов, таких как завиток, дженкинс, трейвис и т.д.