jenkins补充-编写自动化脚本实现devops 流水线和回滚等操作

jenkins补充-编写自动化脚本实现devops 流水线和回滚等操作

  • 自动化部署脚本
  • 基于参数流程控制是部署还是回滚
    deploy rollback_last_version
  • 要实现对服务器分批次上线
    host1 host2 hostall
  • 要实现自动clone指定分支
    master develop

haproxy+keeplived

yum install socat -y
cat /etc/haproxy/haproxy.cfg 
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
listen stats
 mode http
 bind 0.0.0.0:9999
 stats enable
 log global
 stats uri     /haproxy-status
 stats auth    admin:admin
 
 listen webs
  bind 192.168.10.233:80
  mode http
  log global
  option httplog
  server 192.168.10.230 192.168.10.230:8080 check inter 3000 fall 2 rise 5
  server 192.168.10.231 192.168.10.231:8080 check inter 3000 fall 2 rise 5

listen tests
  bind 192.168.10.234:80
  mode http
  log global
  option httplog
  server 192.168.10.230 192.168.10.230:8080 check inter 3000 fall 2 rise 5
  server 192.168.10.231 192.168.10.231:8080 check inter 3000 fall 2 rise 5
 
 
 cat /etc/keepalived/keepalived.conf
 ...
     virtual_ipaddress {
        192.168.10.233 dev eth0 label eth0:0
        192.168.10.234 dev eth0 label eth0:1
    }

jenkins

jenkins
jenkins

jenkins
jenkins

jenkins
jenkins

  • 主机列表 IP_List
  • 代码克隆 Code_Clone
  • 代码打包 Make_Zip
  • 关闭节点 Down_Node
  • 停止服务 Stop_Tomcat
  • 上传代码至 WEB服务器 Scp_Codefile
  • 开户服务 Start_Tomcat
  • 测试WEB服务器 Web_Test
  • 删除历史版本 Del_History_Ver
  • 清除历史包 CleanGz
#!/bin/bash
whoami
DATE=`date +%Y-%m-%d_%H-%M-%S`
ACTION=$1
HOST=$2

function IP_List(){
  if [[ ${HOST} == "Host1" ]];then
    Server_IP="192.168.10.230"
    echo ${Server_IP}

  elif [[ ${HOST} == "Host2" ]];then
    Server_IP="192.168.10.231"
    echo ${Server_IP} 
#    ssh root@192.168.10.220 ""echo enable server webs/${Server_IP}"| socat stdio /var/lib/haproxy/haproxy.sock"
#    echo "${node} 从192.168.10.220 添加成功"
#    ssh root@192.168.10.221 ""echo enable server webs/${Server_IP}"| socat stdio /var/lib/haproxy/haproxy.sock"
#    echo "${node} 从192.168.10.221 添加成功"

  elif [[ ${HOST} == "HostAll" ]];then
    Server_IP="192.168.10.230 192.168.10.231"
    echo ${Server_IP}
  fi
}

function Code_Clone(){
  CodeLink=git@192.168.10.254:web233/web1.git
  cd /data/git/projectname && rm -rf web1 && git clone ${CodeLink}
  echo "克隆代码完成"
}

function Make_Zip(){
  cd /data/git/projectname/web1 && tar czvf testapp.tar.gz ./*
  echo "打包完成"
}

function Down_Node(){
  for node in ${Server_IP};do
    ssh root@192.168.10.220 ""echo disable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
    echo "${node} 从192.168.10.220 移除成功"
    ssh root@192.168.10.221 ""echo disable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
    echo "${node} 从192.168.10.221 移除成功"
  done
}

function Stop_Tomcat(){
  for node in ${Server_IP};do
    ssh www@${node} "/etc/init.d/tomcat stop"
    echo "tomcat服务关闭成功"
  done
}

function Start_Tomcat(){
  for node in ${Server_IP};do
    ssh www@${node} "/etc/init.d/tomcat start"
    echo "tomcat服务开启成功"
  done
}

function Scp_Codefile(){
  cd /data/git/projectname/web1/
  WEB_DIR=/data/tomcat/webapps/testapp
  DIR_NAME=/data/tomcat/tomcat_webdir/testapp-${DATE}
  APP_NAME=/data/tomcat/tomcat_appdir/testapp-${DATE}.tar.gz
  for node in ${Server_IP};do
    scp testapp.tar.gz www@${node}:${APP_NAME}
    ssh www@${node} "mkdir ${DIR_NAME} && tar xvf ${APP_NAME} -C ${DIR_NAME} && rm -rf ${WEB_DIR} && ln -sv ${DIR_NAME} ${WEB_DIR}"
  done
}

function Web_Test(){
  for node in ${Server_IP};do
    NUM=`curl -s -I -m 10 -o /dev/null -w %{http_code} http://${node}:8080/testapp/index.html`
  if [[ ${NUM} -eq 200 ]];then
    echo "${node} 测试通过"
    Add_Node ${node}
  else
    echo "${node} 测试失败,请检查TOMCAT服务"
  fi
  done
}

function Add_Node(){
  node=$1
  echo ${node} "----"
  if [ ${node} == "192.168.10.231" ];then
    echo "192.168.10.231 部署完成,请进行代码测试"
    ssh root@192.168.10.220 ""echo enable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
    echo "${node} 从192.168.10.220 添加成功"
    ssh root@192.168.10.221 ""echo enable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
    echo "${node} 从192.168.10.221 添加成功"
  else
    ssh root@192.168.10.220 ""echo enable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
    echo "${node} 从192.168.10.220 添加成功"
    ssh root@192.168.10.221 ""echo enable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
    echo "${node} 从192.168.10.221 添加成功"
  fi
}

function RollBack(){
  for node in ${Server_IP};do
    NEW_VERSION=`ssh www@${node} ""/bin/ls -l -rt /data/tomcat/tomcat_webdir/|awk -F " " '{print $9}'|tail -n1""`
    echo ${NEW_VERSION}
    NAME=`ssh www@${node} ""/bin/ls -l -rt -d /data/tomcat/tomcat_webdir/testapp-*|grep -B 1 ${NEW_VERSION} | head -n1 | awk '{print $9}'""`
    ssh www@${node} "rm -rf /data/tomcat/webapps/testapp && ln -sv ${NAME} /data/tomcat/webapps/testapp"
  done
}

function CleanGz(){
  for node in ${Server_IP};do
    NUM=`ssh www@${node} "/bin/ls -l -rt -d /data/tomcat/tomcat_appdir/testapp-*|wc -l"`
      for((;$NUM>7;NUM--));do
      #ssh www@${node} "rm -rf \`/bin/ls -l -rt -d /data/tomcat/tomcat__appdir/testapp-* | head -n1 | awk '{print $9}'\`"
      DEL_NAME=`ssh www@${node} ""/bin/ls -l -rt -d /data/tomcat/tomcat_appdir/testapp-* | head -n1 | awk '{print $9}'""`
      ssh www@${node} "rm -rf ${DEL_NAME}"
      echo "${node} 清理成功 ${DEL_NAME}"
    done
  done
}

function Del_History_Ver(){
  for node in ${Server_IP};do
    NUM=`ssh www@${node} "/bin/ls -l -rt -d /data/tomcat/tomcat_webdir/testapp-*|wc -l"`
      for((;$NUM>5;NUM--));do
      #ssh www@${node} "rm -rf \`/bin/ls -l -rt -d /data/tomcat/tomcat_webdir/testapp-* | head -n1 | awk '{print $9}'\`"
      DEL_NAME=`ssh www@${node} ""/bin/ls -l -rt -d /data/tomcat/tomcat_webdir/testapp-* | head -n1 | awk '{print $9}'""`
      ssh www@${node} "rm -rf ${DEL_NAME}"
      echo "${node} 清理成功 ${DEL_NAME}"
    done
  done
}

main(){
  case ${ACTION} in
    Deploy)
      IP_List;
      Code_Clone;
      Make_Zip;
      Down_Node;
      Stop_Tomcat;
      Scp_Codefile;
      Start_Tomcat;
      Web_Test;
      Del_History_Ver;
      CleanGz;
      ;;
    RollBack)
      IP_List;
      Down_Node;
      Stop_Tomcat;
      RollBack;
      Start_Tomcat;
      Web_Test;
      ;;
  esac
}

main $1 $2 $3
posted @ 2019-08-06 15:50  Final233  阅读(899)  评论(0编辑  收藏  举报