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