使用 deploy 工具部署
deploy 工具简介
为了简化部署流程,提高部署效率,我开发了一款名为 deploy 的工具,用于将 tio-boot
工程快速部署到自有服务器上。该工具分为客户端和服务端,用户需要先在服务器上安装服务端,才能通过客户端进行部署操作。工具已开源,源码地址如下:
服务端安装
关于如何安装服务端的详细步骤请参阅项目文档,此处略过。
deploy 工具使用
打包配置文件 .build.txt
该文件用于配置项目在不同操作系统上的打包命令,示例如下:
[win.env]
set JAVA_HOME=D:\java\jdk1.8.0_121
[win.build]
mvn clean package -DskipTests -Pproduction
[linux.env]
export JAVA_HOME=/usr/java/jdk1.8.0_121
[linux.build]
mvn clean package -DskipTests -Pproduction
[mac.env]
set JAVA_HOME=~/java/jdk1.8.0_121
[mac.build]
mvn clean package -DskipTests -Pproduction
此文件定义了在 Windows、Linux 和 macOS 系统上的 Java 环境变量配置及 Maven 打包命令,确保在各平台下能正确构建项目。
部署配置文件 .deploy.toml
部署配置文件用于定义不同环境的部署操作,示例如下:
[dev.upload-run]
url = "http://192.168.1.2:10405/deploy/file/upload-run/"
p = "123456"
b = ".build.txt"
z ="app.zip target/dynamic-css-1.0.0.jar"
file = "app.zip"
d = "unzip/dynamic-css"
c1 = "mkdir -p /data/apps/dynamic-css"
c2 = "[ -d /data/apps/dynamic-css ] && cp -r /data/apps/dynamic-css backup/dynamic-css-backup-$(date +'%Y%m%d_%H%M%S')"
c3 = "cp unzip/dynamic-css/target/dynamic-css-1.0.0.jar /data/apps/dynamic-css/"
c4 = "if [ $(docker ps -q -f name=dynamic-css) ]; then docker stop dynamic-css && docker rm -f dynamic-css; fi"
c5 = "cd /data/apps/dynamic-css && docker run -dit --name dynamic-css --restart=always --net=host -v $(pwd):/app -w /app -e TZ=Asia/Shanghai -e LANG=C.UTF-8 litongjava/jdk:8u391-stable-slim java -jar dynamic-css-1.0.0.jar"
c = "docker ps |grep dynamic-css"
该配置文件定义了 dev
(开发)、test
(测试)和 prod
(生产)三个环境下的部署流程。以 dev.upload-run
为例,解释如下:
url
: 上传文件的服务端地址。p
: 密码,用于身份验证。b
: 指定打包配置文件。z
: 指定需要压缩的文件列表。file
: 指定上传的压缩包文件名。d
: 解压路径。c1-c5
: 一系列的 Shell 命令,用于创建目录、备份旧版本、复制新文件、停止并删除旧容器、启动新容器等操作。c
: 最终检查容器是否成功启动的命令。
执行部署命令
通过命令行工具 deploy
,可以轻松地在不同环境中执行部署操作:
开发环境:
deploy
测试环境:
deploy -e test
生产环境:
deploy -e prod
运行流程
deploy 工具的运行流程如下:
- 编译: 根据
.build.txt
配置进行项目编译。 - 压缩打包: 将编译生成的文件压缩为
.zip
包。 - 上传解压: 将压缩包上传至服务器并解压。
- 备份旧目录: 将旧版本备份,以便回滚操作。
- 复制到指定目录: 将新文件复制到指定的部署目录中。
- 删除旧容器: 停止并删除旧的 Docker 容器。
- 启动新容器: 使用新的镜像和配置启动新的 Docker 容器。
- 检查容器: 最终检查新容器是否成功启动。
部署成功后的反馈信息
部署成功后,deploy 工具会返回相关的执行信息,例如:
response status code: 200
{"success":true,"output":"7636aec41b4b litongjava/jdk:8u391-stable-slim \"java -jar dynamic-c…\" Less than a second ago Up Less than a second dynamic-css\n","time":0}
这段信息表明新容器已成功启动,运行状态正常。
完整的部署文件
[dev.upload-run]
url = "http://192.168.1.2:10405/deploy/file/upload-run/"
p = "123456"
b = ".build.txt"
z ="app.zip target/dynamic-css-1.0.0.jar"
file = "app.zip"
d = "unzip/dynamic-css"
c1 = "mkdir -p /data/apps/dynamic-css"
c2 = "[ -d /data/apps/dynamic-css ] && cp -r /data/apps/dynamic-css backup/dynamic-css-backup-$(date +'%Y%m%d_%H%M%S')"
c3 = "cp unzip/dynamic-css/target/dynamic-css-1.0.0.jar /data/apps/dynamic-css/"
c4 = "if [ $(docker ps -q -f name=dynamic-css) ]; then docker stop dynamic-css && docker rm -f dynamic-css; fi"
c5 = "cd /data/apps/dynamic-css && docker run -dit --name dynamic-css --restart=always --net=host -v $(pwd):/app -w /app -e TZ=Asia/Shanghai -e LANG=C.UTF-8 litongjava/jdk:8u391-stable-slim java -jar dynamic-css-1.0.0.jar"
c = "docker ps |grep dynamic-css"
[test.upload-run]
url = "http://xxxx:10405/deploy/file/upload-run/"
p = "xxxx"
b = ".build.txt"
z ="app.zip target/dynamic-css-1.0.0.jar"
file = "app.zip"
d = "unzip/dynamic-css"
c1 = "mkdir -p /data/apps/dynamic-css"
c2 = "[ -d /data/apps/dynamic-css ] && cp -r /data/apps/dynamic-css backup/dynamic-css-backup-$(date +'%Y%m%d_%H%M%S')"
c3 = "cp unzip/dynamic-css/target/dynamic-css-1.0.0.jar /data/apps/dynamic-css/"
c4 = "if [ $(docker ps -q -f name=dynamic-css) ]; then docker stop dynamic-css && docker rm -f dynamic-css; fi"
c5 = "cd /data/apps/dynamic-css && docker run -dit --name dynamic-css --restart=always --net=host -v $(pwd):/app -w /app -e TZ=Asia/Shanghai -e LANG=C.UTF-8 litongjava/jdk:8u391-stable-slim java -jar dynamic-css-1.0.0.jar --app.env=test"
c = "docker ps |grep dynamic-css"
[prod.upload-run]
url = "http://xxxx:10405/deploy/file/upload-run/"
p = "xxxx"
b = ".build.txt"
z ="app.zip target/dynamic-css-1.0.0.jar"
file = "app.zip"
d = "unzip/dynamic-css"
c1 = "mkdir -p /data/apps/dynamic-css"
c2 = "[ -d /data/apps/dynamic-css ] && cp -r /data/apps/dynamic-css backup/dynamic-css-backup-$(date +'%Y%m%d_%H%M%S')"
c3 = "cp unzip/dynamic-css/target/dynamic-css-1.0.0.jar /data/apps/dynamic-css/"
c4 = "if [ $(docker ps -q -f name=dynamic-css) ]; then docker stop dynamic-css && docker rm -f dynamic-css; fi"
c5 = "cd /data/apps/dynamic-css && docker run -dit --name dynamic-css --restart=always --net=host -v $(pwd):/app -w /app -e TZ=Asia/Shanghai -e LANG=C.UTF-8 litongjava/jdk:8u391-stable-slim java -jar dynamic-css-1.0.0.jar --app.env=prod"
c = "docker ps |grep dynamic-css"