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 [email protected]192.168.7.103 ""echo enable  server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"
     ssh [email protected]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} [email protected]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 [email protected]2.168.7.103 "echo "disable server myapp/${node}" | socat stdio   /run/haproxy/admin.sock"
    echo "${node} 在负载均衡192.168.7.103下线成功"
    ssh [email protected] "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 [email protected]${node}   "/etc/init.d/tomcat stop"
  done
}

function start_tomcat(){
  for node in ${Server_IP};do
    ssh [email protected]${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 [email protected]${node}:/data/tomcat/tomcat_appdir/code-${DATE}.zip
    ssh [email protected]${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 [email protected] ""echo enable  server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"
      ssh [email protected] ""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 [email protected] ""echo enable  server myapp/${node}" | socat stdio /run/haproxy/admin.sock"
      ssh [email protected] ""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 [email protected]${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  [email protected]${node}  ""ls  -l  -rt  /data/tomcat/tomcat_webdir/ | grep -B 1 ${NOW_VERSION}| head -n 1| awk ‘{print $9}‘""`
    ssh [email protected]${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
                

原文地址:https://www.cnblogs.com/maxuebin/p/11623546.html

时间: 2024-10-04 02:17:51

jenkins之代码部署回滚脚本的相关文章

git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚

[git 删除本地分支] git branch -D br [git 删除远程分支] git push origin :br  (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id [本地代码库回滚]: git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除 git reset --hard HEAD~3:将最近3次的提交回滚 [远程代码库回滚]: 这个是重点要说的内容

Git 命令 四 git代码库回滚

git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id [本地代码库回滚]: git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除 git reset --hard HEAD~3:将最近3次的提交回滚 [远程代码库回滚]: 这个是重点要说的内容,过程比本地回滚要复杂 应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布 原理:先将本地分支退回到某个commit,删除远程分支

上线代码、回滚代码

上线脚本 #!/bin/bash FWDIR="$(cd `dirname "${BASH_SOURCE-$0}"`; pwd)" bin=`dirname "$0"` bin=`cd "$bin"; pwd` now=`date "+%Y%m%d_%H%M%S"` tag_release=di.release.${now} [email protected]:bdp-server/bdp-di.git e

gitf远程代码库回滚(webstorm下)

git远程代码库回滚(webstorm下) 1. 场景 添加了一个文件[file-for-test.js]到git的控制下 进行了三次修改,并分别进行了三次commit,最后进行了一次push git log结果如下图: [file-for-test.js]文件的内容如下图: 现在希望,将远程代码库下的[file-for-test.js]文件回滚到[//lyn test1]的版本 2. 操作步骤 2.1. [Version Control]——[Log] 2.2. 右击[//lyn test1]

【MySQL】MySQL事务回滚脚本

MySQL自己的 mysqlbinlog | mysql 回滚不好用,自己写个简单脚本试试: 想法是用mysqlbinlog把需要回滚的事务区域从mysql-bin.file中找到,然后通过脚本再插入DB. ## INSERT 需要将新增数据删除 对应DELETE ## DELETE 需要将删除数据恢复 对应INSERT ## UPDATE 需要将修改数据恢复 对应UPDATE ## 手动读取BINLOG,并找到对应位置和对应事务 ## 手动删除除事务外的其他说明语句 INSERT回滚最简单,其

git远程库代码版本回滚方法

最近使用git时, 造成了远程库代码需要回滚到之前版本的情况,为了解决这个问题查看了很多资料. 问题产生原因: 提交了错误的版本到远程库. 以下是解决的方法, 供大家参考: 1.对本地代码库进行回滚 git log 查看提交历史,找出要回滚到的commit-id git reset --hard commit-id :回滚到commit-id git reset --hard HEAD~3:将最近3次的提交回滚 2.远程代码库回滚 进行这一步的时候遇到了困难,尝试了多种方法, 查看很多资料都提到

jenkins结合ansible用shell实现自动化部署和回滚

最近用jenkins+gitlab+ansible做持续化集成,自动化部署和版本回滚.然而deploy plugin没能做到增量升级和回滚操作,折腾了很久决定自己写个脚本来简单实现. 环境: centos 7.0 64位 gitlab:v2.9.0 git:2.9 jenkins 1.651.3.git plugin.GitLab Plugin.Dynamic Parameter Plug-in等 ansible:2.1.0.0 各工具职能: 1.gitlab做版本管理 2.jenkins根据指

svn 代码回滚

svn 代码如何回滚. 一.改动代码没有提交到仓库 这种情况下,使用svn revert就能取消之前的修改. svn revert用法如下: # svn revert [-R] something 其中something可以是(目录或文件的)相对路径也可以是绝对路径. 当something为单个文件时,直接svn revert something就行了:当something为目录时,需要加上参数-R(Recursive,递归),否则只会将something这个目录的改动. 在这种情况下也可以使用

Android Studio如何回滚已经commit的代码

对于commit(不是push)的代码如何回滚,这块对于刚转到git的开发者还是比较陌生的.今天我来说下这块的内容: 按照惯例,先上图,下图是还没有commit任何代码的push界面,这个时候是没有commit任何内容的: 然后我修改了string.xml的内容,并且执行了commit操作: 接下来就要说如何进行revert commit了,通过选中工程,点击右键,在弹出的列表中选择Git-->Repository-->Reset HEAD...,有些人可能会说我右键弹出来的列表中没有发现有G