在服务器上解压和更新项目包的自动化部署脚本
在现代软件开发中,自动化部署成为了提升工作效率的重要手段。今天,我们将讨论一段用于在服务器上解压项目包并更新服务的脚本。这段脚本封装了一系列操作,旨在简化部署过程,减少人为错误的发生。
脚本概述
脚本的功能主要包括:
- 下载指定的压缩包文件。
- 解压缩文件到指定目录。
- 复制相关文件至目标服务路径。
- 关闭正在运行的服务进程。
- 启动新的服务进程。
接下来,我们逐步解析脚本的每一个部分。
脚本代码
#!/bin/sh #压缩包文件名 fileName=dn-planning20240827V1.zip #拉取上传文件 wget -P /tmp http://文件服务器IP:端口/file_back/rest/ftpFileController/down/${fileName} #系统服务路径 projectPath=/home/appuser/run/dn-server echo "复制"${fileName} mv /tmp/${fileName} /home/appuser/backup echo "解压压缩包"${fileName} unzip -O GBK -o /home/appuser/backup/${fileName} -d /home/appuser/backup cp -R /home/appuser/backup/dn-planning/template/* /${dataPath}/template echo "复制jar包到"${dataPath}"路径下" cp /home/appuser/backup/dn-planning/dn-planning.jar /${dataPath} echo "关闭服务进程" # 根据端口号杀死进程 netstat -nlp | grep :8081 | grep -v grep | awk '{print $7}' | awk -F '/' '{print $1}' | xargs kill -9 echo "更新项目" nohup java -Xms4096m -Xmx12288m -jar -Dserver.port=8081 -Dspring.profiles.active=dev ${projectPath}/dn-planning.jar 2>&1 &
脚本详细解析
文件名定义:
fileName=dn-planning.zip
这行定义了要下载和解压缩的压缩包文件名。
下载压缩包:(事先需把要发布的项目压缩包上传到文件服务器指定目录下)
wget -P /tmp http://文件服务器IP:端口/file_back/rest/ftpFileController/down/${fileName}
使用
wget
命令从指定的URL下载文件,并将其存储在/tmp
目录下。定义服务路径:
projectPath=/home/appuser/run/dn-server
指定了服务的运行路径,以便后续文件操作使用。
移动文件到备份目录:
mv /tmp/${fileName} /home/appuser/backup
将下载的文件移动到备份目录以进行解压缩。
解压缩文件:
unzip -O GBK -o /home/appuser/backup/${fileName} -d /home/appuser/backup
使用
unzip
解压缩文件,并将内容存储在备份目录中。-O GBK
选项确保了中文文件名的正确显示。复制模板文件:
cp -R /home/appuser/backup/dn-planning/template/* /${projectPath}/template
从解压的文件中复制模板文件到服务的模板目录。
复制JAR包:
cp /home/appuser/backup/dn-planning/dn-planning.jar /${projectPath}
将JAR包复制到服务运行目录,准备启动服务。
杀死旧服务进程:
netstat -nlp | grep :8081 | grep -v grep | awk '{print $7}' | awk -F '/' '{print $1}' | xargs kill -9
通过查找占用8081端口的进程,并使用
kill -9
命令强制终止,以避免冲突。PS: 这段脚本的作用是查找并强制杀掉正在使用8081端口的进程。下面是对这段命令的详细分解:
netstat -nlp
: 这个命令用于显示网络连接状态。选项说明:-n
: 以数字格式显示地址和端口号。-l
: 只显示在监听状态的服务。-p
: 显示该连接对应的进程ID(PID)和程序名称。
grep :8081
: 从netstat
的输出中筛选出使用8081端口的行。grep -v grep
: 排除掉包含“grep”这个词的行,避免匹配到当前的grep命令本身。awk '{print $7}'
: 从筛选出的结果中提取第7列,通常这一列包含相应进程的PID和程序名称。awk -F '/' '{print $1}'
: 以斜杠(/
)为分隔符,从中提取出PID部分。xargs kill -9
: 将提取到的PID作为参数传给kill -9
命令,强制终止这些进程。-9
代表强制杀死进程,无论其状态如何。
总结:
这段脚本的最终效果是:找到所有当前占用8081端口的进程,并将其强制终止。请谨慎使用此命令,确保不会不小心终止重要的进程。启动新服务进程:
nohup java -Xms4096m -Xmx12288m -jar -Dserver.port=8081 -Dspring.profiles.active=dev /${projectPath}/dn-planning.jar 2>&1 &
使用
nohup
命令在后台启动Java服务,并指定JVM参数以及运行的JAR包。
结论
这段脚本通过简单而有效的步骤,实现了在服务器上自动化解压和部署项目包的过程。自动化部署不仅提高了工作效率,也减少了人为错误的风险。在今后的开发过程中,可以根据项目需求对脚本进行扩展和优化,以适应不同的部署场景。
希望这篇博客能为你的自动化部署提供一些灵感和帮助!如有任何问题或想法,欢迎在评论区分享。