前言
在項目開發過程中,經常需要部署代碼到開發環境,每天可能需要很多次。每次部署代碼的步驟
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