Auto-deploying используя Ant + ssh + ftp

Опубликовал – 20.12.2011

Вступление

Вечер добрый. Возникла необходимость обновлять сервера на амазон инстансах. На помощь пришел Ant.

Первая задумка была очень проста, на Windows инстансе установлен веб-сервер Tomcat, установлен он как сервис. Необходимо обновить сервер, например, после каких то изменений. Первая попытка, просто заменить .war файл в каталоге webapps на tomcat, не привела ни к чему, хотя в настройках веб-сервера стоит autoDeploy=»true» (если кто знает решение данной проблемы, напишите пожалуйста). То есть .war просто заменился, а редеплоя не происходило. Поэтому родился способ номер два: останавливаем tomcat, копируем по ftp .war файл(ы), удаляем распакованный .war файл, запускаем tomcat.

Действие

Давайте посмотрим этот способ на примере, но забегая вперед, скажу, использование ftp на инстансе с сервером это потенциальная дыра в безопасности. Поэтому, тут я покажу способ только для примера. В реальной же жизни, следует переделать весь трафик на ssh.

Итак, для начала установите на свой instanceopenssh и любой ftp server. На ftp сервере создайте юзера и расшарьте папку webapps которая находится в корне %CATALINA_HOME%.
Так же, убедитесь что в папке %ANT_HOME%/lib лежат библиотеки commons-net-3.0.1.jar и jsch-0.1.45.jar (думаю, версии не очень важны). Первая используется для работы с ftp, вторая для работы с ssh.

Вот наш Ant скриптик, deploy.xml:

<project name="Configurer" default="deploy" basedir=".">

    <!-- адрес инстанса -->
    <property name="server" value="192.168.101.161"/> 

    <!-- настройки ssh и ftp -->
    <property name="ssh.username" value="admin"/>
    <property name="ssh.password" value="123456"/>

    <property name="ftp.username" value="admin"/>
    <property name="ftp.password" value="123456"/>
    <property name="ftp.port" value="21"/>

    <!-- указываем локальную папку, откуда будем брать .war файл -->
    <property name="local.trunk" value="D:\work\project\trunk"/>
    <property name="local.mms.target" value="${local.trunk}\mmsserver\target"/>

    <target name="deploy">
        <!-- останавливаем томкат, благодаря тому, что он работает как сервис -->
        <sshexec host="${server}"
                 username="${ssh.username}"
                 password="${ssh.password}"
                 trust="yes"
                 command="net stop Tomcat7"
                />

        <!-- копируем .war файл нашего сервера -->
        <ftp passive="true" action="send" server="${server}" port="${ftp.port}" userid="${ftp.username}"
             password="${ftp.password}"
             remotedir="/" depends="yes">
            <fileset dir="${local.mms.target}">
                <include name="mms.war"/>
            </fileset>
        </ftp>

        <!-- удаляем старые файлы в распакованном .war -->
        <ftp passive="true" action="del" server="${server}" port="${ftp.port}" userid="${ftp.username}"
             password="${ftp.password}"
             remotedir="/">
            <fileset>
                <include name="mms/**"/>
            </fileset>
        </ftp>

        <!-- теперь удаляем старые папки от распакованного .war файла -->
        <ftp passive="true" action="rmdir" server="${server}" port="${ftp.port}" userid="${ftp.username}"
             password="${ftp.password}"
             remotedir="/">
            <fileset>
                <include name="mms/**"/>
            </fileset>
        </ftp>

        <!-- возобновляем работу веб-сервера -->
        <sshexec host="${server}"
                 username="${ssh.username}"
                 password="${ssh.password}"
                 trust="yes"
                 command="net start Tomcat7"
                />

    </target>

</project>

Запускать очень просто, достаточно выполнить команду:

ant -f deploy.xml

Наслаждайтесь ;)

Рассказать друзьям:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • Яндекс.Закладки
  • В Живую Ленту Google
  • Сто закладок
Комментарии (5) - Auto-deploying используя Ant + ssh + ftp

Ответ

  1. Илья:

    Ну так то неплохо придумано! ) Молодец!

    Thumb up Thumb down 0

  2. Asander:

    А сего не использовал
    tomcat api

    тут описаны команды
    http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Supported_Manager_Commands

    вот пример комманды
    http://localhost:8080/manager/text/reload?path=/contextName

    Thumb up Thumb down 0

  3. Asander:

    Если на сервере запущено несколько приложений
    все будут тормозиться
    только для того чтобы перегрузить одно.
    Твой метод 100% будет работать , но мне кажется он не оптимален.

    Thumb up Thumb down 0

  4. limitium:

    mvn tomcat:redeploy

    Thumb up Thumb down 0

Ответить

Comments

Перед отправкой формы: