使用wagon-maven-plugin部署Java项目到远程服务器

前言

  在项目开发过程中,经常需要部署代码到开发环境,每天可能需要很多次。每次部署代码的步骤

    1、将本地代码打包

    2、将打包好的文件上传到服务器

    3、重启服务,完成部署。

  如果使用maven管理项目,有一个maven插件可以自动完成以上步骤。插件名为:wagon-maven-plugin。

  下面记录使用这个插件自动部署代码到服务器。

配置Linux服务器用户名和密码

  为了让wagon-maven-plugin插件能ssh连上Linux服务器,首先需要在Maven的配置文件setting.xml中配置好server的用户名和密码。

 

<servers>
    <server>
        <id>linux-server-dev</id>
        <username>root</username>
        <password>123456</password>
    </server>
</servers>

 

文件上传到服务器

  maven项目可以使用mvn package指令打包,打包完成后位于target目录下。如果想要部署到服务器上,首先需要将打完的包上传到服务器。那么如何通过maven自动将包上传到服务器呢?这里需要在maven项目的核心文件pom.xml中配置wagon-maven-plugin插件。

<build>
    <extensions>
        <extension>
            <!-- 配置wagon-maven-plugin连接服务器使用的技术是ssh  -->
       <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.8</version>
        </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>wagon-maven-plugin</artifactId>
            <version>1.0</version>
            <configuration>
                <serverId>linux-server-dev</serverId>
                <!-- serverId即上一步中在settings.xml中配置的service的id -->
                <fromFile>target/project_name.jar</fromFile>
                <!-- 要上传到服务器的文件,一般来说是jar或者war包 -->
                <url>scp://192.168.1.1/home/project_name/</url>
                <!-- 配置服务器的地址以及文件上传的目录。 -->
            </configuration>
        </plugin>
    </plugins>
</build>

  配置完成以后,如果需要部署项目,直接使用指令: mvn clean package wagon:upload-single

重启服务

  代码打包完成后自动上传到服务器,那最后的步便是重启服务。是否可以通过maven配置直接重启服务呢?答案是肯定的。下面就是如何配置是maven可以重启服务。

  做法是,将重启命令写到一个脚本中,把脚本放在当前项目下,因为每一个项目的启动脚本都不一样,这样便于管理。

 

#!/bin/bash

ps -ef | grep a8admin | grep qa |awk '{print $2}' |xargs kill -9
sleep 1
nohup java -jar -Dspring.profiles.active=qa -Dserver.port=8083 a8admin-api-1.0-RELEASE.jar >> 8083.log 2>&1 &
tail -f 8083.log

 

以上是便是一个重启命令脚本。

  有了命令脚本,现在需要在maven的pom.xml文件中配置调用脚本的代码。

<build>
    <extensions>
        <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.8</version>
        </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>wagon-maven-plugin</artifactId>
            <version>1.0</version>
            <configuration>
                <serverId>linux-server-dev</serverId>
                <fromFile>target/project_name.jar</fromFile>
                <url>scp://192.168.20.128/home/project_name/</url>
                <commands>
                    <command>sh ./restart.sh</command>
                </commands>
                <!-- 显示运行命令的输出结果 -->
                <displayCommandOutputs>true</displayCommandOutputs>
            </configuration>
        </plugin>
    </plugins>
</build>

  配置完成以后,这样在打包时的指令为:mvn clean package wagon:upload-single wagon:sshexec。

配置execution

  如果完成上面的配置,而且配置信息正确,那么便可以通过命令一键部署项目到服务器,并且可以自动重启。

  如果感觉上面的命令太长,那么可以配置executio,配置成功以后在运行打包同样可以运行upload-single和sshexec命令。

 

<build>
    <extensions>
        <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.8</version>
        </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>wagon-maven-plugin</artifactId>
            <version>1.0</version>
            <executions>
                <execution>
                    <id>upload-deploy</id>
                    <!-- 运行package打包的同时运行upload-single和sshexec -->
                    <phase>package</phase>
                    <goals>
                        <goal>upload-single</goal>
                        <goal>sshexec</goal>
                    </goals>
                    <configuration>
                        <serverId>linux-server-dev</serverId>
                        <fromFile>target/project_name.war</fromFile>
                        <url>scp://192.168.20.128/home/tomcat/apache-tomcat-7.0.55/webapps</url>
                        <commands>
                            <command>sh /home/tomcat/apache-tomcat-7.0.55/bin/shutdown.sh</command>
                            <command>rm -rf /home/tomcat/apache-tomcat-7.0.55/webapps/javawebdeploy</command>
                            <command>sh /home/tomcat/apache-tomcat-7.0.55/bin/startup.sh</command>
                        </commands>
                        <displayCommandOutputs>true</displayCommandOutputs>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

 

  配置完成以后,指令恢复到: mvn clean package

 

posted @ 2019-06-27 23:22  code_change_word  阅读(2225)  评论(0编辑  收藏  举报