Pull to refresh

Обновление веб приложения на удаленном сервере после сборки Maven'ом через SSH

Reading time 2 min
Views 2K

Проблема


После сборки проекта с помощью Build сервера или на локальной машине требуется выложить полученное приложение на тестовый сервер.

Решение


Добавим в pom.xml специальный профиль, в котором с помощью плагина
<profiles>
    <profile>
        <id>deployApp</id>
        <activation>
             <activeByDefault>false</activeByDefault>
        </activation>
        <build>
             <plugins>
                 <plugin>
                     <artifactId>maven-antrun-plugin</artifactId>
                     <executions>
                         <execution>
                             <id>deployApp</id>
                             <phase>package</phase>
                             <goals>
                                 <goal>run</goal>
                             </goals>
                             <configuration>
                                 <tasks>
                                 <!-- Здесь разместим конфиг ant'а, который и сделает все мясо--> 
                                 </tasks>
                             </configuration>
                         </execution>
                     </executions>
                     <dependencies>
                         <dependency>
                             <groupId>org.apache.ant</groupId>
                             <artifactId>ant-jsch</artifactId>
                             <version>1.7.1</version>
                         </dependency>
                     </dependencies>
                 </plugin>
             </plugins>
         </build>
     </profile>
</profiles>


выложим собранное в фазе package приложение на удаленный сервер.
<sshexec host="${deployApp.host}"  trust="true"
                username="${deployApp.username}" password="${deployApp.passwd}"
                command="${deployApp.containerStopCmd}"/>

<scp trust="true" password="${deployApp.passwd}"
        file="${project.build.directory}/${project.build.finalName}.${project.packaging}"
        remoteTofile="${deployApp.username}@${deployApp.host}:${deployApp.targetWar}" />

<sshexec host="${deployApp.host}"  trust="true"
                username="${deployApp.username}" password="${deployApp.passwd}"
                command="${deployApp.containerStartCmd}"/>


Maven нужно запускать с параметром -P deployApp

ЗЫ. При использовании ssh возможны грабли, если команда запуска контейнера создает новый процесс (а так обычно и бывает). В этом случае помогает nohup
Tags:
Hubs:
+1
Comments 0
Comments Leave a comment

Articles