deploy-helper
是一個Spring Boot & Spring Cloud项目自动远程部署轻量级Maven插件.
Gitee:https://gitee.com/dt_research_institute/deploy-helper
通常情况下,我们将开发好的Spring Boot程序部署到服务器上时,会经历以下流程:
1、maven项目打包
2、通过sftp、scp软件将jar包拷贝到目标服务器上
3、通过ps
命令查找pid进程号,使用kill
命令杀进程
4、通过java命令启动jar包
如果需求更改后,我们需要重复以上流程,对于开发者来说,是一件很无聊的事情,特别是需要发布到测试服务器等进行测试的情况下,非常耗时间。
deploy-helper
解决的就是步骤2、步骤3、步骤4,项目打包好后,执行插件完成自动化部署,整个过程耗时10s左右
软件架构说明
在maven項目的pom.xml
中直接引入
<plugin>
<groupId>com.github.xiaoymingroupId>
<artifactId>deploy-helper-maven-pluginartifactId>
<version>1.0version>
<configuration>
<configurationFile>src/main/resources/deployHelperConfig.xmlconfigurationFile>
configuration>
plugin>
deployHelperConfig.xml
配置文件在项目的src/main/resources
目录下时,可以不用在pom.xml
里面进行配置
引入后,在项目中可以看到我们引入的插件
### 配置文件
deploy-helper
在执行时,需要传递一个xml文件作为初始化文件,xml代表了所需要进行自动化部署的配置信息,XML
模板如下:
<deployHelperConfiguration>
<profile server="dev" deploy="dev">profile>
<servers>
<server profile="dev" host="192.168.0.223" port="22" username="root" password="123456">server>
servers>
<deploys>
<deploy profile="dev"
source="target/demo-http-1.0.jar"
target="/home/xiaoymin/test/test1/demo-http-1.0.jar"
processName="demo-http-1.0.jar"
activeDefaultStart="true"
startShell="/home/xiaoymin/test/test1/startup.sh"
stopShell="/home/xiaoymin/test/test1/stop.sh">
deploy>
<deploy profile="test"
source="target/demo-http-1.0.jar"
target="/home/xiaoymin/test/test5/demo-http-1.0.jar"
processName="demo-http-1.0.jar"
activeDefaultStart="true">
deploy>
deploys>
deployHelperConfiguration>
在上面的XML模板中,主要包含三个节点
profile
节点代表的是在插件执行时具体引用那个server
和deploy
Linux
服务器节点配置,主要包含的属性:profile(名称)、host(主机号)、port(端口号)、username(登陆用户名)、password(登陆密码)路径
+文件名
,不能只包含目录,上传是覆盖策略ps
命令查找时可以精准定位到程序的pid
,如果stopShell
停止脚本存在的话则该参数可以不传startShell
目标服务器上配置的启动脚本和停止脚本参考如下:
启动脚本(startup.sh):
nohup java -jar demo-http-1.0.jar &
停止脚本(stop.sh):
#!/bin/bash
echo "Stop Procedure : demo-http-1.0.jar"
pid=`ps -ef |grep java|grep demo-http-1.0.jar|awk '{print $2}'`
echo 'old Procedure pid:'$pid
if [ -n "$pid" ]
then
kill $pid
fi
目前使用deploy-helper
插件主要区分2种场景
我们可以通过在部署服务器上线创建2个脚本,分别是启动脚本
和停止脚本
,此时,我们需要在deployHelperConfig.xml
配置文件中配置deploy
节点,示例如下:
<deploy profile="dev"
source="target/demo-http-1.0.jar"
target="/home/xiaoymin/test/test1/demo-http-1.0.jar"
startShell="/home/xiaoymin/test/test1/startup.sh"
stopShell="/home/xiaoymin/test/test1/stop.sh">
deploy>
通过上面的配置文件,我们可以知道
部署目录:/home/xiaoymin/test/test1
,如果该目录不存在,则会自动创建该目录
启动脚本:/home/xiaoymin/test/test1/startup.sh
停止脚本:/home/xiaoymin/test/test1/stop.sh
需要注意的是,如果使用这种场景,那么目标服务器的启动脚本和停止脚本文件必须存在,并且必须是可执行的,需要有Linux的x
权限
deploy-helper
提供的默认脚本如果你嫌弃写shell
脚本麻烦,那么deploy-helper
默认提供了启动和停止的脚本,此时,配置deploy
的节点时如下:
<deploy profile="test"
source="target/demo-http-1.0.jar"
target="/home/xiaoymin/test/test5/demo-http-1.0.jar"
processName="demo-http-1.0.jar"
activeDefaultStart="true">
deploy>
通过上面的配置:
部署目录:/home/xiaoymin/test/test5/
,如果该目录不存在,则会自动创建该目录
进程名称:processName
在这种模式下必须设置该参数,并且最好是通过ps
命令能查找到pid
进程号的,所以需要提供完整的名称最好
启动自动启动:activeDefaultStart
命令优先级低于startShell
,如果startShell
启动命令不为空,程序会使用startShell
中的命令进行启动程序,否则activeDefaultStart
参数必须设置为true
,此时,使用deploy-helper
默认会生成jar项目的启动命令进行启动