实现自动上线脚本·Shell
2023-01-17 本文已影响0人
技术老男孩
一、架构设计:
Jenkins服务器架构:
jenkens下载资源根目录:http://192.168.99.30/var/www/html/deploy/packages
项目md5文件:http://192.168.99.30/var/www/html/deploy/packages/myproject.md5
项目tar包:http://192.168.99.30/var/www/html/deploy/packages/myproject.tar.gz
项目当前版本号文件:http://192.168.99.30/var/www/html/deploy/packages/var.txtWeb应用服务器架构:
存放下载文件目录:http://192.168.99.100/var/www/html/download
存放部署项目目录:http://192.168.99.100/var/www/html/deploy/
客户端访问路径:http://192.168.99.100/current
二、实现思路:
- 将功能拆分下载和部署二个函数
- 下载函数:实现从Jenkins服务器下载所有的资源包
- 部署函数:实现将资源包解压覆盖老版本内容
- 主函数:进行逻辑判断分别在什么场景下执行哪一个函数
三、使用shell实现功能
- 编写脚本
[root@web ~]# vim download_file.sh
- 下载函数
# 下载代码思路
# 判断下载工具
# 没有则安装下载
# 下载版本号
# 判断ver.txt的内容是不是不是最新
# 不是最新的
# 下载md5和tar包
# 最新
# exit 退出脚本
download(){
# 安装wget工具
rpm -ql wget &> /dev/null || yum -y install wget &> /dev/null
# 下载版本号
wget -q ${remote_var} -O ${download_dir}/var.txt
# 下载md5和tar包
wget -q ${remote_md5} -O ${download_dir}/myproject.md5
wget -q ${remote_tar} -O ${download_dir}/myproject.tar.gz
echo "End Download..."
}
- 部署
# 部署代码思路
# 解压tar包
# 复制代码到部署目录
# 删除源文件
# 添加软连接
deploy(){
# 解压myproject
tar -xf ${download_dir}/myproject.tar.gz -C ${download_dir}/
# 删除老版本内容
[ -e ${deploy_dir}/myproject ] && rm -rf ${deploy_dir}/myproject
# 获取当前版本号
version=$(curl -s ${remote_var})
# 创建项目目录
[ -e ${deploy_dir}/myproject ] || mkdir ${deploy_dir}/myproject
# 复制新版本内容到部署目录
cp -a ${download_dir}/myproject-${version}/* ${deploy_dir}/myproject
# 删除源文件
rm -rf ${download_dir}/myproject-${version}
# 添加软连接
ln -s ${deploy_dir}/myproject ${deploy_current}
echo "deploy complete..."
}
# 主程序思路
# 定义路径变量
# 判断本地下载部署目录是否存在
# 不存在则创建
# 判断md5的值是否与远端一致
# 不一致
# 提示报错
# 一致
# deploy
- 主程序
main(){
# 本地下载目录
download_dir=/var/www/html/download
# 本地部署目录
deploy_dir=/var/www/html/deploy
# 本地访问目录
deploy_current=/var/www/html/current
# Jenkins服务器路径
remote_baseurl=http://192.168.99.30/deploy/packages
# Jenkins服务版本文件
remote_var=${remote_baseurl}/var.txt
# Jenkins服务器MD5校验文件
remote_md5=${remote_baseurl}/myproject.md5
# Jenkins服务器myproject的tar包
remote_tar=${remote_baseurl}/myproject.tar.gz
# 创建download目录
[ -e ${download_dir} ] || mkdir -p ${download_dir}
# 创建deploy目录
[ -e ${deploy_dir} ] || mkdir -p ${deploy_dir}
# 判断var.txt文件
if [ ! -e ${download_dir}/var.txt ];then
echo "Start Download file..."
download
else
# 判断版本号
if [ $(curl -s ${remote_var}) != $(cat ${download_dir}/var.txt) ];then
echo "发现新版本..."
echo "Start Download file..."
download
else
# 退出脚本
echo "当前版本相同,无需下载~"
exit
fi
fi
# 判断md5
local_md5=$(md5sum ${download_dir}/myproject.tar.gz | awk '{print $1}')
if [ $(curl -s ${remote_md5}) == ${local_md5} ];then
echo "MD5校验成功"
deploy
else
echo "校验失败,请检查md5文件"
fi
}
- 结尾处调用主程序
main
- 运行脚本
[root@web ~]# bash download_file.sh
-
访问测试,在游览器输入地址,看到index.html内容视为成功:
访问测试.png