使用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