# deploy-helper
**Repository Path**: dt_research_institute/deploy-helper
## Basic Information
- **Project Name**: deploy-helper
- **Description**: Spring Boot & Spring Cloud项目自动远程部署Maven插件
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 8
- **Forks**: 1
- **Created**: 2020-07-02
- **Last Updated**: 2024-08-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# deploy-helper
## 介绍
`deploy-helper`是一個Spring Boot & Spring Cloud项目自动远程部署轻量级Maven插件.
通常情况下,我们将开发好的Spring Boot程序部署到服务器上时,会经历以下流程:
1、maven项目打包
2、通过sftp、scp软件将jar包拷贝到目标服务器上
3、通过`ps`命令查找pid进程号,使用`kill`命令杀进程
4、通过java命令启动jar包
如果需求更改后,我们需要重复以上流程,对于开发者来说,是一件很无聊的事情,特别是需要发布到测试服务器等进行测试的情况下,非常耗时间。
`deploy-helper`解决的就是步骤2、步骤3、步骤4,项目打包好后,执行插件完成自动化部署,整个过程耗时10s左右
## 软件架构
软件架构说明
## 安装教程
在maven項目的`pom.xml`中直接引入
```xml
com.github.xiaoymin
deploy-helper-maven-plugin
1.2
/mnt/home/deployHelperConfig.xml
```
`deployHelperConfig.xml`配置文件在项目的`src/main/resources`目录下时,可以不用在`pom.xml`里面进行配置
引入后,在项目中可以看到我们引入的插件

## 使用说明
### 配置文件
`deploy-helper`在执行时,需要传递一个xml文件作为初始化文件,xml代表了所需要进行自动化部署的配置信息,`XML`模板如下:
```xml
```
在上面的XML模板中,主要包含三个节点
- profile:`profile`节点代表的是在插件执行时具体引用那个`server`和`deploy`
- servers:`Linux`服务器节点配置,主要包含的属性:profile(名称)、host(主机号)、port(端口号)、username(登陆用户名)、password(登陆密码)
- deploy:该节点是最终做自动化部署时的配置,可以配置多个,在profile节点时可以自动指定,区分开发环境&生成环境,属性如下:
- profile:名称
- source:需要上传的jar文件,可以是相对目录下的文件,也可以使用绝对路径
- target:目标服务器路径,需要注意的时该属性必须配置完整的`路径`+`文件名`,不能只包含目录,上传是覆盖策略
- processName:该参数主要用于在服务上用于查询进程号的名称,越完整越好,通过该名称通过`ps`命令查找时可以精准定位到程序的`pid`,如果`stopShell`停止脚本存在的话则该参数可以不传
- backup: 由于插件目前的策略是直接覆盖服务器上文件,有时候我们希望保留上一个版本,此时可以设置该参数为true,帮助我们进行备份,该参数为true时,会在目标目录创建一个backup的文件夹,将服务器的文件进行备份(自1.1版本开始)
- activeDefaultStart:是否自动生成启动jar包的启动命令,该参数的优先级低于`startShell`
- startShell:启动脚本,必须配置完整路径
- stopShell:停止脚本,必须配置完整路径
### 脚本参考
目标服务器上配置的启动脚本和停止脚本参考如下:
**启动脚本(startup.sh)**:
```shell
nohup java -jar demo-http-1.0.jar &
```
**停止脚本(stop.sh)**:
```shell
#!/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`节点,示例如下:
```xml
```
通过上面的配置文件,我们可以知道
部署目录:`/home/xiaoymin/test/test1`,如果该目录不存在,则会自动创建该目录
启动脚本:`/home/xiaoymin/test/test1/startup.sh`
停止脚本:`/home/xiaoymin/test/test1/stop.sh`
需要注意的是,如果使用这种场景,那么目标服务器的启动脚本和停止脚本文件必须存在,并且**必须是可执行的**,需要有Linux的`x`权限
### 使用`deploy-helper`提供的默认脚本
如果你嫌弃写`shell`脚本麻烦,那么`deploy-helper`默认提供了启动和停止的脚本,此时,配置`deploy`的节点时如下:
```xml
```
通过上面的配置:
部署目录:`/home/xiaoymin/test/test5/`,如果该目录不存在,则会自动创建该目录
进程名称:`processName`在这种模式下必须设置该参数,并且最好是通过`ps`命令能查找到`pid`进程号的,所以需要提供完整的名称最好
启动自动启动:`activeDefaultStart`命令优先级低于`startShell`,如果`startShell`启动命令不为空,程序会使用`startShell`中的命令进行启动程序,否则`activeDefaultStart`参数必须设置为`true`,此时,使用`deploy-helper`默认会生成jar项目的启动命令进行启动
备份策略:`backup`参数为true时,会对目标文件进行备份