Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zunzhuowei/auto-deploy-maven-plugin

Cloning code from git repository and deploying it to remote server with local Maven compilation
https://github.com/zunzhuowei/auto-deploy-maven-plugin

auto-deploy deploy-plugin git maven

Last synced: about 2 months ago
JSON representation

Cloning code from git repository and deploying it to remote server with local Maven compilation

Awesome Lists containing this project

README

        

## auto-deploy-maven-plugin
该项目是一个自动化部署 `java` 项目到远程服务器的 `maven` 插件

## 快速使用
1. 克隆项目代码到本地
2. `cd` 到 `plugins` 目录,执行 `mvn clean install -DskipTests`
3. `cd` 到 `deploy` 目录,进入到 `resources/happy_beard/acti/dev/` 目录,修改 `deploy-happy_beard-acti-dev.yml` 配置文件
4. 完成 `yml` 配置后, `cd` 到 `deploy` 目录, `mvn clean package -DskipTests`, 即可将项目部署到远程服务器中

参考如下,根据个人需求修改配置(详细模板参考 `plugins` 中的 `deploy-version-template.yml` ):
```yaml
deploy:
mavenHome: "D://soft/apache-maven-3.2.1" # 配置 maven home 目录
gitConfig:
gitDirectory: "E://aa" # 配置 clone 下来的代码存放的位置
gitUri: "[email protected]:zunzhuowei/zhuozun.git" # 配置远程仓库地址
gitRemote: "master" # 配置 git 分支
gitPassword: "" # git 仓库密码,如果已经是 ssh 免密登录了,则为空
gitUsername: "" # git 仓库用户名,如果已经是 ssh 免密登录了,则为空

# 执行的 maven 指令集;
pomGoals:
-
mavenPomxmlPath: "E://aa/pom.xml" # 执行指令的 pom.xml 的地址
mavenGoals: "clean package -DskipTest=true" # 执行的指令

# 本地替换配置文件集列表
moveFile2Dirs:
-
filePathName: "D://test/yml/bootstrap.yml" # 配置文件的地址
destinationDir: "E://aa/zhuozun-gateway-server/src/main/resources/" # 移动配置文件的目的地

# 远程 linux 服务器配置列表
servers:
-
id: "server1" # 服务器 id 应当唯一
host: "192.168.1.188" # 服务器 ip
port: "22" # 服务器 端口
userName: "user_01" # 服务器用户名
passWord: "xxxxxxxxxxxxxxxx" # 服务器密码

# 备份
backups:
-
serverId: server1 # 配置的服务器 id
backupCfgs:
-
remoteSrcFilePath: /home/user_01/nohup.out # 远程源文件目录;
remoteBackupDestPaths: # 远程服务备份目录;应该为列表,支持备份到多个目录
- /home/user_01/qs/

localPaths: # 本地备份目录;应该为列表,支持备份到多个目录
- D://aa/ss/

# 配置文件替换
config:
enable: remote # 配置文件替换类型;remote/local;枚举类
# 远程配置文件替换配置
remote:
remoteServers:
-
host: 192.168.1.188 # 配置文件服务器 ip
port: 22 # 配置文件服务器 端口
userName: user_01 # 配置文件服务器用户名
passWord: xxxxxxxxxxxxxxxx # 配置文件服务器密码
configCfgs: # 配置详情列表
-
remoteCfgFilePath: /home/user_01/qs/bootstrap.yml # 远程配置文件服务器的配置文件目录
localDestPath: E://aa/zhuozun-gateway-server/src/main/resources/ # 存放获取到的配置文件的本地目录
-
remoteCfgFilePath: /home/user_01/qs/bootstrap222.yml # 远程配置文件服务器的配置文件目录
localDestPath: E://aa/zhuozun-gateway-server/src/main/resources/ # 存放获取到的配置文件的本地目录

# 本地配置文件替换配置
local:
localCfgs:
-
filePathName: "D://test/yml/bootstrap.yml" # 配置文件的地址
destinationDir: "E://aa/zhuozun-gateway-server/src/main/resources/" # 移动配置文件的目的地

# 上传打好的包
uploadPackages:
-
serverId: server1 # 远程服务器id
localPackagePath: E://aa/zhuozun-gateway-server/target/zhuozun-gateway-server.jar # 要上传应用包所在本地目录地址
remoteDest: /home/user_01/ # 远程服务器目录
packageName: gateway.jar # 上传后,在远程服务器中的命名

# 远程服务器执行 linux 指令集,完成部署任务
deployInstructionSet:
-
serverId: server1 # 远程服务器id
instructions: # 执行的指令集合
- "cd /home/user_01/"
- "mkdir logs"
- "nohup java -jar gateway.jar > ./logs/out.log 2>&1 &"
- ps
```

## 详细配置介绍

* 激活的部署配置文件列表由 `` 标签中 `` `` `` 的值以及
拼接字符串 `` 拼接。
如: `happy_beard-acti-dev`,为激活如下app配置
```xml

happy_beard
app
dev

```

* 配置文件所在目录也由 `` 标签中 `` `` `` 的值构成
如 `` 中配置如下:
```xml

happy_beard
app
dev

```
则配置文件所在目录为 `resources/happy_beard/acti/dev/` 中,文件名称为 `deploy-happy_beard-acti-dev.yml`

```xml

com.game.qs.plugin
plugins
1.0.0


myid

package


deploy




happy_beard-acti-dev




false

deploy-

-




happy_beard

app

dev


happy_beard
app
test


happy_beard
acti
dev


happy_beard
acti
prod






```

## 插件打包流程

1. 备份远程服务器中正在执行的应用

2. 拉取 `git` 指定分支的代码

3. 替换 `git` 代码中的配置文件

4. 执行 `maven` 指令打包项目

5. 上传打好的包到远程服务器

6. 部署上传的包到远程服务器中

7. 回滚备份的原来的应用

## 部署执行流程

1. 备份远程正在执行的 `war`、`jar` 包、或者配置文件等到指定目录(远程服务器目录或者本机目录)

2. 根据配置好的 `git` 远程仓库地址 `clone` 指定分支的代码到本地目录;

3. 替换应用配置文件

3.1 本地配置文件替换到指定应用目录中。

3.2 远程 `linux` 服务器配置文件下载下来替换到指定应用目录中

4. 执行 `maven` 配置的打包指令

5. 上传打好的包(`war`、`jar`)到配置的远程的全部服务器;

6. 根据配置的命令,`ssh` 执行命令给远程服务器,使其做相应的业务

7. 处理部署完成之后的相应事项。

## 回滚应用执行流程

1. 找到部署时的备份的应用包

2. 如果为远程服务器备份,则直接远程执行 `linux` 指令,完成备份还原操作;如果为本地备份,则需先上传应用包,再执行还原指令

3. 处理还原完成后的相应事项。

## 详细配置模板
```yaml
deploy:
#mavenHome: "E://maven/apache-maven-3.5.4" # 配置 maven home 目录
mavenHome: "D://soft/apache-maven-3.2.1" # 配置 maven home 目录
gitConfig:
gitDirectory: "E://aa" # 配置 clone 下来的代码存放的位置
gitUri: "[email protected]:zunzhuowei/base.git" # 配置远程仓库地址
gitRemote: "master" # 配置 git 分支
gitPassword: "" # git 仓库密码,如果已经是 ssh 免密登录了,则为空
gitUsername: "" # git 仓库用户名,如果已经是 ssh 免密登录了,则为空

# 执行的 maven 指令集;
pomGoals:
-
mavenPomxmlPath: "E://aa/pom.xml" # 执行指令的 pom.xml 的地址
mavenGoals: "clean package -DskipTest=true" # 执行的指令
# -
# mavenPomxmlPath: "E://aa/gateway/pom.xml" # 执行指令的 pom.xml 的地址
# mavenGoals: "clean package -DskipTest=true" # 执行的指令

# 本地替换配置文件集列表
moveFile2Dirs:
-
filePathName: "D://test/yml/bootstrap.yml" # 配置文件的地址
destinationDir: "E://aa/gateway/src/main/resources/" # 移动配置文件的目的地

# -
# filePathName: "E://aa/pom.xml" # 配置文件的地址
# destinationDir: "E://haha2/" # 移动配置文件的目的地

# 远程 linux 服务器配置列表
servers:
-
id: "server1" # 服务器 id 应当唯一
host: "192.168.1.188" # 服务器 ip
port: "22" # 服务器 端口
userName: "user_01" # 服务器用户名
passWord: "xxxxxxxxxxxxxxxx" # 服务器密码
# -
# id: server1 # 服务器 id 应当唯一
# host: 192.168.1.188 # 服务器 ip
# port: 22 # 服务器 端口
# userName: user_01 # 服务器用户名
# passWord: xxxxxxxxxxxxxxxx # 服务器密码

# 备份
backups:
-
serverId: server1 # 配置的服务器 id
backupCfgs:
-
remoteSrcFilePath: /home/user_01/nohup.out # 远程源文件目录;
remoteBackupDestPaths: # 远程服务备份目录;应该为列表,支持备份到多个目录
- /home/user_01/qs/

localPaths: # 本地备份目录;应该为列表,支持备份到多个目录
- D://aa/ss/
# -
# remoteSrcFilePath: /wwwroot1/java/tomcat/webapp/app.war # 远程源文件目录;
# remoteBackupDestPaths: # 远程服务备份目录;应该为列表,支持备份到多个目录
# - /wwwroot1/java/backs/app/
# - /wwwroot1/java/backs/app2/
# localPaths: # 本地备份目录;应该为列表,支持备份到多个目录
# - D://aa1/ss/
# - D://aa1/ss2/
# -
# serverId: server2 # 配置的服务器 id
# backupCfgs:
# -
# remoteSrcFilePath: /wwwroot2/java/tomcat/webapp/app.war # 远程源文件目录;
# remoteBackupDestPaths: # 远程服务备份目录;应该为列表,支持备份到多个目录
# - /wwwroot2/java/backs/app/
# - /wwwroot2/java/backs/app2/
# localPaths: # 本地备份目录;应该为列表,支持备份到多个目录
# - D://aa2/ss/
# - D://aa2/ss2/
# -
# remoteSrcFilePath: /wwwroot22/java/tomcat/webapp/app.war # 远程源文件目录;
# remoteBackupDestPaths: # 远程服务备份目录;应该为列表,支持备份到多个目录
# - /wwwroot22/java/backs/app/
# - /wwwroot22/java/backs/app2/
# localPaths: # 本地备份目录;应该为列表,支持备份到多个目录
# - D://aa22/ss/
# - D://aa22/ss2/

# 配置文件替换
config:
enable: remote # 配置文件替换类型;remote/local;枚举类
# 远程配置文件替换配置
remote:
remoteServers:
-
host: 192.168.1.188 # 配置文件服务器 ip
port: 22 # 配置文件服务器 端口
userName: user_01 # 配置文件服务器用户名
passWord: xxxxxxxxxxxxxxxx # 配置文件服务器密码
configCfgs: # 配置详情列表
-
remoteCfgFilePath: /home/user_01/qs/bootstrap.yml # 远程配置文件服务器的配置文件目录
localDestPath: E://aa/gateway/src/main/resources/ # 存放获取到的配置文件的本地目录
-
remoteCfgFilePath: /home/user_01/qs/bootstrap222.yml # 远程配置文件服务器的配置文件目录
localDestPath: E://aa/gateway/src/main/resources/ # 存放获取到的配置文件的本地目录
# -
# host: 192.168.1.188 # 配置文件服务器 ip
# port: 22 # 配置文件服务器 端口
# userName: user_01 # 配置文件服务器用户名
# passWord: xxxxxxxxxxxxxxxx # 配置文件服务器密码
# configCfgs: # 配置详情列表
# -
# remoteCfgFilePath: /wwwroot/java/cfgs/jdbc.properties # 远程配置文件服务器的配置文件目录
# localDestPath: D://aa/base/deploy/src/main/resources # 存放获取到的配置文件的本地目录
# -
# remoteCfgFilePath: /wwwroot/java/cfgs/log4j.properties # 远程配置文件服务器的配置文件目录
# localDestPath: D://aa/base/deploy/src/main/resources # 存放获取到的配置文件的本地目录

# 本地配置文件替换配置
local:
localCfgs:
-
filePathName: "D://test/yml/bootstrap.yml" # 配置文件的地址
destinationDir: "E://aa/gateway/src/main/resources/" # 移动配置文件的目的地

# -
# filePathName: "E://aa/pom.xml" # 配置文件的地址
# destinationDir: "E://haha2/" # 移动配置文件的目的地

# 上传打好的包
uploadPackages:
-
serverId: server1 # 远程服务器id
localPackagePath: E://aa/gateway/target/gateway.jar # 要上传应用包所在本地目录地址
remoteDest: /home/user_01/ # 远程服务器目录
packageName: gateway.jar # 上传后,在远程服务器中的命名
# -
# serverId: server2 # 远程服务器id
# localPackagePath: D://aa/base/deploy2/target/acti.war # 要上传应用包所在本地目录地址
# remoteDest: /wwwroot/java/deploy/ # 远程服务器目录
# packageName: myacti.war # 上传后,在远程服务器中的命名

# 远程服务器执行 linux 指令集,完成部署任务
deployInstructionSet:
-
serverId: server1 # 远程服务器id
instructions: # 执行的指令集合
- "cd /home/user_01/"
- "mkdir logs"
- "nohup java -jar gateway.jar > ./logs/out.log 2>&1 &"
- ps
# -
# serverId: server2 # 远程服务器id
# instructions: # 执行的指令集合
# - ls
# - pwd
# - ps

# 还原部署时备份的应用
reductionApps:
-
serverId: server1 # 远程服务器id
localFilePath: D://aa/backup/app.war # 备份的文件本地目录地址
remoteDestPath: /wwwroot/java/backup/app.war # 备份的文件远程目录地址
reductionTempDir: /wwwroot/java/tempdir/ #还原包临时存放目录
instructions: # 执行的指令集合
- ls
- pwd
- ps
-
serverId: server2 # 远程服务器id
localFilePath: D://aa/backup/app.war # 备份的文件本地目录地址
remoteDestPath: /wwwroot/java/backup/app.war # 备份的文件远程目录地址
reductionTempDir: /wwwroot/java/tempdir/ #还原包临时存放目录
instructions: # 执行的指令集合
- ls
- pwd
- ps
```