jenkins之代码部署回滚脚本

Posted maxuebin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jenkins之代码部署回滚脚本相关的知识,希望对你有一定的参考价值。

#!/bin/bash
DATE=`date +%Y-%m-%d_%H-%M-%S`
METHOD=$1
BRANCH=$2
GROUP_LIST=$3

function IP_list()
  if [[ $GROUP_LIST == "online-group1" ]];then
     Server_IP="192.168.7.105"
     echo $Server_IP
  elif [[ $GROUP_LIST == "online-group2" ]];then
     Server_IP="192.168.7.106"
     echo $Server_IP
     ssh root@192.168.7.103 ""echo enable  server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"
     ssh root@192.168.7.104 ""echo enable  server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"
  elif [[ $GROUP_LIST == "online-all" ]];then
     Server_IP="192.168.7.105 192.168.7.106"
     echo $Server_IP
  fi


function clone_code()
  rm -rf /data/git/linux37/web1
  cd /data/git/linux37
  git clone -b $BRANCH git@192.168.7.101:linux37/web1.git


function scanner_code()
  cd /data/git/linux37/web1 && /usr/local/sonar-scanner/bin/sonar-scanner


function make_zip()
  cd /data/git/linux37/web1  && zip -r code.zip ./*



down_node()
  for node in $Server_IP;do
    ssh root@192.168.7.103 "echo "disable server myapp/$node" | socat stdio   /run/haproxy/admin.sock"
    echo "$node 在负载均衡192.168.7.103下线成功"
    ssh root@192.168.7.104 "echo "disable server myapp/$node" | socat stdio   /run/haproxy/admin.sock"
    echo "$node 在负载均衡192.168.7.104下线成功"
  done


function stop_tomcat()
  for node in $Server_IP;do
    ssh tomcat@$node   "/etc/init.d/tomcat stop"
  done


function start_tomcat()
  for node in $Server_IP;do
    ssh tomcat@$node   "/etc/init.d/tomcat start"
    #sleep 5
  done


function scp_zipfile()
  for node in $Server_IP;do
    scp /data/git/linux37/web1/code.zip tomcat@$node:/data/tomcat/tomcat_appdir/code-$DATE.zip
    ssh tomcat@$node "unzip /data/tomcat/tomcat_appdir/code-$DATE.zip  -d /data/tomcat/tomcat_webdir/code-$DATE && rm -rf  /data/tomcat/tomcat_webapps/myapp && ln -sv  /data/tomcat/tomcat_webdir/code-$DATE /data/tomcat/tomcat_webapps/myapp"
  done


function web_test()
  #sleep 20
  for node in $Server_IP;do
    NUM=`curl -s  -I -m 10 -o /dev/null  -w %http_code  http://$node:8080/myapp/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 [[ $GROUP_LIST == "online-all" ]];then
      ssh root@192.168.7.103 ""echo enable  server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"
      ssh root@192.168.7.104 ""echo enable  server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"   
    fi
    ##########################################
    if [ $node == "192.168.7.105" ];then
       echo "192.168.7.105 部署完毕,请进行代码测试!"
    else
      ssh root@192.168.7.103 ""echo enable  server myapp/$node" | socat stdio /run/haproxy/admin.sock"
      ssh root@192.168.7.104 ""echo enable  server myapp/$node" | socat stdio /run/haproxy/admin.sock"
    fi


function rollback_last_version()
  for node in $Server_IP;do
   NOW_VERSION=`ssh tomcat@$node ""/bin/ls -l  -rt /data/tomcat/tomcat_webapps/ | awk -F"->" ‘print $2‘  | tail -n1""`
   NOW_VERSION=`basename $NOW_VERSION`
   echo $NOW_VERSIONG
    NAME=`ssh  tomcat@$node  ""ls  -l  -rt  /data/tomcat/tomcat_webdir/ | grep -B 1 $NOW_VERSION| head -n 1| awk ‘print $9‘""`
    ssh tomcat@$node "rm -rf /data/tomcat/tomcat_webapps/myapp && ln -sv  /data/tomcat/tomcat_webdir/$NAME /data/tomcat/tomcat_webapps/myapp"
    echo "$node 回滚至$NAME成功"
  done


main()
   case $1  in
      deploy)
        IP_list;
        clone_code;
        scanner_code;
        make_zip;
        down_node;
        stop_tomcat;
        scp_zipfile;
        start_tomcat;
        web_test;
         ;;
      rollback_last_version)
        IP_list;
        echo $Server_IP
        down_node;
        stop_tomcat;
        rollback_last_version;
        start_tomcat;
        web_test;
         ;;
    esac


main $1 $2 $3
                

 

以上是关于jenkins之代码部署回滚脚本的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins实现代码的部署&回滚

Jenkins持续集成案例之-运维部署方式

Jenkins+Gitlab通过脚本自动部署回滚web项目版本至服务器集群(测试环境和正式环境),图文详细

jenkins之代码回滚

Jenkins代码发布与回滚

jenkins实现生产环境部署文件的回滚操作