Project--git版本管理Shelllinux

实现自动上线脚本·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.txt

Web应用服务器架构:

存放下载文件目录:http://192.168.99.100/var/www/html/download
存放部署项目目录:http://192.168.99.100/var/www/html/deploy/
客户端访问路径:http://192.168.99.100/current

二、实现思路:

三、使用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 
上一篇下一篇

猜你喜欢

热点阅读