zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    ORA00257 archiver error. 错误的处理方法
    Eclipse快捷键大全
    struts2 globalresults
    oracle创建表空间
    struts2 action中result参数详解
    struts2小程序登录验证
    清理系统垃圾文件 请命名为:*.bat
    网上免费阅读的计算机编程书籍列表
    eclipse+myeclipse+mysql+tomcat配置数据源
    o(∩_∩)o...哈哈 somethingaboutJAVA
  • 原文地址:https://www.cnblogs.com/fina/p/11309459.html
Copyright © 2011-2022 走看看