文章目录
当前项目是springboot 项目,每次(测试)部署时,要先打包成 jar 文件,再 SCP 上传的linux 服务器上,用shell 命令停上旧的服务,删除旧的代码,再运行刚刚上传的jar …,这是一系列的繁琐操作。而
wagon-maven-plugin
可以简化这些繁琐操作。
1、maven 依赖
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>1.0</version>
</dependency>
2、wagon-maven-plugin 配置
2.1、wagon-maven-plugin 的配置
<build>
<finalName>assets</finalName>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.10</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>1.0</version>
<configuration>
<serverId>assets</serverId>
<!-- 需要部署的文件 -->
<fromFile>target/assets.jar</fromFile>
<!-- 部署目录 用户:密码@ip+部署地址:端口 -->
<url><![CDATA[ scp://root:密码@192.168.1.100:28/usr/tomcat_assets/ ]]></url>
<!--shell 执行脚本 -->
<commands>
<!-- 停止服务-->
<command>sh /usr/tomcat_assets/stop.sh</command>
<!-- 启动服务 -->
<command>sh /usr/tomcat_assets/start.sh</command>
</commands>
<displayCommandOutputs>true</displayCommandOutputs>
</configuration>
</plugin>
</plugins>
</build>
使用步骤:
执行:mvn clean package
我们熟知的maven 打包命令,这里对 springboot 项目进行打包 ;
执行:wagon:upload-single
是 上传文件 ;
执行:wagon:shexec
是 执行shell 命令 。
如果想上传文件、执行shell 命令 一起执行,则执行: mvn wagon:upload-single wagon:sshexec
。
如果想打包、上传文件、执行shell 命令 三者一起执行,则执行: mvn clean package wagon:upload-single wagon:sshexec
。
如果你觉得上面的命令太复杂了? 请看 方法2
。
2.2、将 wagon:upload-single wagon:sshexec
合并到 package
命令中
将 wagon:upload-single wagon:sshexec
合并到 package
命令中,当执行打包命令 package
时,就会执行 上传文件、 执行shell 命令。
<build>
<finalName>assets</finalName>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.10</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>assets</serverId>
<!-- 需要部署的文件 -->
<fromFile>target/assets.jar</fromFile>
<!-- 部署目录 用户:密码@ip+部署地址:端口 -->
<url><![CDATA[ scp://root:密码@192.168.1.100:28/usr/tomcat_assets/ ]]> </url>
<!--shell 执行脚本 -->
<commands>
<!-- 停止服务-->
<command>sh /usr/tomcat_assets/stop.sh</command>
<!-- 启动服务 -->
<command>sh /usr/tomcat_assets/start.sh</command>
</commands>
<displayCommandOutputs>true</displayCommandOutputs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
使用时,执行 mvn clean package
命令即可。
此处的 mvn clean package
命令 相当于执行了 mvn clean package wagon:upload-single wagon:sshexec
命令 。
2.3、用户名和密码配置在 maven 的 settings.xml
如果密码放到项目不安全,可以将密码放到 maven 的 settings.xml 。方法1、方法2都可以这样配置。下面是方法2的配置方式。
settings.xml :
<servers>
<server>
<id>assets</id>
<username>root</username>
<password><![CDATA[密码]]></password>
</server>
</servers>
注意: <server>
的 <id>
的值与 <serverId>
的值 要保持一致。
pom.xml 的配置:
<build>
<finalName>assets</finalName>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.10</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>assets</serverId>
<!-- 需要部署的文件 -->
<fromFile>target/assets.jar</fromFile>
<!-- 部署目录 用户@ip+部署地址:端口 -->
<url><![CDATA[ scp://[email protected]:28/usr/tomcat_assets/ ]]> </url>
<!--shell 执行脚本 -->
<commands>
<!-- 停止服务-->
<command>sh /usr/tomcat_assets/stop.sh</command>
<!-- 启动服务 -->
<command>sh /usr/tomcat_assets/start.sh</command>
</commands>
<displayCommandOutputs>true</displayCommandOutputs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
3、与 wagon-maven-plugin 无关,但是项目可能用的配置(可以忽略)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 修改相应的SpringBootApplication.java -->
<mainClass>xxx.yyy.zzz.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
4、 停止、启动服务相关的脚本
stop.sh
停止服务的脚本:
#!/bin/bash
APP_NAME='assets.jar'
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ];then
echo 'Stop Process...'
kill -9 $tpid
fi
sleep 1
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ];then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
start.sh
启动脚本:
#!/bin/bash
fileDir=/usr/tomcat_assets
fileName=assets.jar
nohup /usr/java/jdk1.8.0_201/bin/java -jar ${fileDir}/${fileName} > ${fileDir}/assets.log 2>&1 &
echo $?
echo 'Start Success! '