Jenkins之五-----基于脚本实现代码部署与回滚

实战:实现脚本代码部署与回滚

框架图:

1、安装并配置tomcat服务

 官方下载JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

(1)从官网下载tomcat二进制安装包 http://tomcat.apache.org/

下载路径:https://archive.apache.org/dist/tomcat/

 1、在两台后端服务器上安装JDK包

1、下载JDK包,使用8版本的即可,并将下载的包解压,创建软链接

[root@tomcat-web1 src]# tar xvf jdk-8u212-linux-x64.tar.gz 
[root@tomcat-web1 src]# ln -sv /usr/local/src/jdk1.8.0_212/   /usr/local/jdk
‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_212/’

2、设置JDK环境变量,并生效

[root@tomcat-web1 src]# vim /etc/profile # 配置环境变量
export HISTTIMEFORMAT="%F %T `whoami`"
export export LANG="en_US.utf-8"
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

[root@tomcat-web1 src]# . /etc/profile # 生效环境变量

3、对JDK的可执行程序创建软链接

[root@tomcat-web1 src]# ln -sv /usr/local/jdk/bin/java  /usr/bin/
‘/usr/bin/java’ -> ‘/usr/local/jdk/bin/java’

4、查看此时解压后的JDK版本

[root@tomcat-web1 src]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

2、在两台后端服务器上安装tomcat服务

1、在官网上下载tomcat软件、解压、并创建用户账号

[root@tomcat-web1 apps]#mkdir /apps
[root@tomcat-web1 apps]# tar xvf apache-tomcat-8.5.42.tar.gz  #解压tomcat包
[root@tomcat-web1 apps]# ln -sv /apps/apache-tomcat-8.5.42 /apps/tomcat  # 创建tomcat软链接,方便后期升级tomcat版本。
‘/apps/tomcat’ -> ‘/apps/apache-tomcat-8.5.42’
[root@tomcat-web1 apps]# useradd -m www -u 2020 -s /bin/bash  # 创建一个www账号,指定用户的家目录,以及指定shell类型,使其可以登录

2、创建两个存放app和web的目录

[root@tomcat-web1 home]# mkdir /data/tomcat/tomcat_appdir -p  #下载的压缩代码目录
[root@tomcat-web1 home]# mkdir /data/tomcat/tomcat_webdir/myapp -p # 访问代码目录
[root@tomcat-web1 home]# mkdir /data/tomcat/tomcat_webapps -p  #解压后的代码目录

3、修改tomcat配置文件

# vim /apps/tomcat/conf/server.xml
 <Host name="localhost"  appBase="/apps/tomcat/tomcat_webdir" # 指定访问网页的路径

4、在之前创建的myapp目录下创建一个测试页面,用来测试访问网站是否正常,第一台后端服务器访问的IP地址:

# vim /data/tomcat/tomcat_webdir/myapp/index.html
192.168.7.104 web1

第二台后端服务器访问的网页测试

# vim /data/tomcat/tomcat_webdir/myapp/index.html
192.168.7.105 web2

5、配置完tomcat服务之后,修改tomcat的属主与数组权限,启动tomcat服务

[root@tomcat-web1 ~]# chown www.www /data/tomcat/ /apps/tomcat/ /apps/apache-tomcat-8.5.42 -R  # 将tomcat相关的目录属主和属组权限进行修改

[root@tomcat-web1 ~]# su - www  
[www@tomcat-web1 ~]$ /apps/tomcat/bin/catalina.sh  start
Using CATALINA_BASE:   /apps/tomcat
Using CATALINA_HOME:   /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.

[root@tomcat-web1 ~]# su - www -c /apps/tomcat/bin/startup.sh # 或者直接在root权限下切换至www用户启动tomcat服务

注意:一般生产中会遇到很难将tomcat服务停止,以下是本人写的脚本,用来启动和停止tomcat服务

停止和启动tomcat服务脚本

将此脚本放到/etc/init.d/目录下,起名为tomcat,加上执行权限即可。

#!/bin/bash
# #########################################################
# Tomcat init script for     #########
###########################################################
# chkconfig: 2345 96 14 ###################################
# description: 2016/11/1.  ##########################
# #########################################################

JDK_HOME=/usr/local/jdk  # 指定jdk路径
CATALINA_HOME=/apps/tomcat  #指定tomcat目录
export JDK_HOME CATALINA_HOME
source /etc/profile
#PID=`ps -ef  | grep  -v grep  | grep java | awk  '{print $2}'`
#NUM=`ps -ef  | grep  -v grep  | grep java | awk  '{print $2}' | wc -l`

#case $1 in
start() {
        echo "正在判断服务状态,请稍等!"       
        echo "请稍等3秒钟"
        echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
        if      netstat -an | grep 8080 | grep LISTEN >/dev/null
        then
                echo "Tomcat已经正在运行了!"  
        else
                echo "Tomcat没有运行,1秒后启动!"
                echo 1;sleep 1
                $CATALINA_HOME/bin/catalina.sh start
                echo  "Tomcat 已经成功启动完成,5秒后判断是否启动成功"
                echo "5";sleep 1;echo "4";sleep 1
        echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
        if  netstat -an | grep 8080 | grep LISTEN >/dev/null
            then
                PID=`ps -ef | grep  tomcat | grep jdk | awk '{print $2}'`
                NUM=`ps -ef | grep  tomcat | grep jdk | awk '{print $2}' | wc -l`
                echo "Tomcat 已经成功启动${NUM} 个Tomcat进程!,PID为${PID}"
            else
                echo "Tomcat启动失败,请重新启动!"
                echo 1
        fi
        fi
        }
stop() {
                PID=`ps -ef  | grep  -v grep  | grep java | awk  '{print $2}'`
                NUM=`ps -ef | grep  -v "color"  | grep tomcat | awk '{print $2}' | wc -l`
                echo "正在判断服务状态,请稍等3秒钟!"  
                echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
        if  netstat -an | grep 8080 | grep LISTEN >/dev/null
           then
                echo "Tomcat运行中,1秒后关闭!"
                echo  1;sleep 1
                echo "即将关闭Tomcat服务,请稍等!" 
        $CATALINA_HOME/bin/catalina.sh stop ;echo "已经执行关闭命令,正在检查关闭了多少Tomcat进程,请稍等30秒钟!"
                sleep 5  ###########这里只写了5s,生产中写上27s,估计tomcat服务都不一定能启动起来,修改此处
        echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
                pkill java && pkill tomcat
                if  netstat -an | grep 8080 | grep LISTEN >/dev/null;then
                        PID=`ps -ef  | grep  -v grep  | grep java | awk  '{print $2}'`
                        NUM=`ps -ef | grep  -v "color"  | grep tomcat | awk '{print $2}' | wc -l`
                        kill -9 $PID ;echo "已成功关闭${NUM} 个tomcat进程"
                else
                        echo  "Tomcat 已经关闭完成!" 
                echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
                fi
        else
                echo "Tomcat 没有运行"
                echo 1
        fi
        if  netstat -an | grep 8080 | grep LISTEN >/dev/null;then
            PID=`ps -ef  | grep  -v grep  | grep java | awk  '{print $2}'`
           #NUM=`ps -ef | grep  -v "color"  | grep tomcat | awk '{print $2}' | wc -l`
            echo "关闭失败,即将强制删除tomcat进程!"
            sleep 2
            pkill tomcat ;sleep 2
            if  netstat -an | grep 8080 | grep LISTEN >/dev/null;then
                echo "强制关闭失败,即将再次强制删除tomcat进程!"
                pkill java; sleep 2
            fi
        fi
        }
restart() {
        stop
        start
 }

case "$1" in
start)
start
;;

stop)
stop
;;

restart)
restart
;;

*)
echo $"Usage: $0 {start|stop|restart|status}" 
esac

3、在两台主机上安装keepalived和haproxy

1、在两台主机分别安装keepalived和haproxy,keepalived做高可用(主从VIP漂移),haproxy做反向代理,分担后端服务器的压力。

# yum install keepalived  haproxy  -y

2、修改主keepalived配置文件,添加VIP地址,/etc/keepalived/keepalived.conf  ,监听的端口号是:5000

注意要删除vrrp_strict选项,此选项需要严格遵守VRRP协议,不允许状况,不删除会导致web页面无法访问

1、没有VIP地址

2、单播邻居

3、在VRRP版本2中有IPv6地址

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.7.248 dev eth0 label eth0:1
    }
}

3、修改从keepalived配置文件/etc/keepalived/keepalived.conf,监听的端口号是5000

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state SLAVE
    interface eth0
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.7.248 dev eth0 label eth0:1
    }
}

4、修改两个haproxy主机的配置文件/etc/haproxy/haproxy.cfg,监听VIP地址,将访问的VIP地址调度到后端的服务器上

stats socket /var/lib/haproxy/stats mode 600 level admin  #指定haproxy的socket文件路径,方便执行脚本时在haproxy服务器上讲tomcat下线

listen stats  
 mode http
 bind 0.0.0.0:9999
 stats enable
 log global  
 stats uri     /haproxy-status  #指定haproxy状态页访问URL
 stats auth    haadmin:q1w2e3r4ys

listen myapp
    mode http  # 修改为http模式就会进行轮询调度,采用七层代理,如果使用tcp调度,只会一直调度一个服务器,采用四层代理,只有一个haproxy代理连接数达到上限之后,才会调度到另一个服务器上
    bind 192.168.7.248:80
    server 192.168.7.104 192.168.7.104:8080 check
    server 192.168.7.105 192.168.7.105:8080 check

haproxy服务器需要安装socat命令,用来执行后端tomcat服务器的上线与下线

# yum install socat -y

5、启动haproxy和keepalived服务

# systemctl start keepalived  haproxy

注意,如果haproxy启动不起来,就需要修改/etc/sysctl.conf配置文件

[root@node1 src]# sysctl -a | grep bind
net.ipv4.ip_nonlocal_bind = 0  # 查询到此内核参数开关为0时,需要在/etc/sysctl.conf配置文件中改为1

修改/etc/sysctl.conf配置文件

# /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1

# sysctl -p  #内核参数修改完之后,将配置文件生效

6、配置好keepalived服务,需要将主的停掉,看VIP地址是否能够漂移到从服务器上,如果可以,就启动主从的keepalived服务,查看此时的haproxy和keepalived监听的端口号,keepalived监听的是5000端口。

 7、此时可以访问网页测试效果,后端的两个服务器可以进行轮询调度访问,此时haproxy和keepalived配置完成。

 

4、安装配置jenkins

Jenkins官方下载地址:https://jenkins.io/zh/ 

 官方下载JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

1、下载JDK包,解压并创建软链接、修改环境变量

[root@jenkins src]# tar xvf jdk-8u212-linux-x64.tar.gz  #解压下载的jdk包
[root@jenkins src]# ln -sv /usr/local/src/jdk1.8.0_212/  /usr/local/jdk  #创建软链接
‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_212/’
[root@jenkins src]# ln -sv /usr/local/jdk/bin/java /usr/bin  # JAVA命令的软链接
‘/usr/bin/java’ -> ‘/usr/local/jdk/bin/java’

定义JDK环境变量,并使环境变量生效

#  vim  /etc/profile
export HISTTIMEFORMAT="%F %T `whoami`"
export export LANG="en_US.utf-8"
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

#  . /etc/profile

2、查看此时JAVA版本,如果能查看到JAVA版本号,说明安装配置没问题

[root@jenkins src]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

3、修改jenkins配置文件:/etc/sysconfig/jenkins

JENKINS_USER="root"   #由于jenkins账号可能存在权限过低问题,使用root用户启动
#添加启动参数
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -server -Xms2g -Xmx2g -Xss512k -Xmn1g \  #最大内存是2G,最小内存也是2G,如果主机内存够大,也可以再调整大点
-XX:CMSInitiatingOccupancyFraction=65 \
-XX:+UseFastAccessorMethods \
-XX:+AggressiveOpts -XX:+UseBiasedLocking \
-XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 \
-XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2 \
-XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 \
-XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC \
-XX:+CMSParallelRemarkEnabled -Djava.awt.headless=true \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname="192.168.7.101""  #添加本地的IP地址

Jenkins安装git命令,用来克隆gitlab上的代码

# yum install git -y

4、启动jenkins服务,并查看监听的端口号,此时的端口号是:8080

[root@jenkins default]# systemctl start jenkins

5、实现基于Jenkins的代码扫描

具体操作见Jenkins之四:https://www.cnblogs.com/struggle-1216/p/12439355.html

6、生成公私钥对,实现免密钥登陆

1、在Jenkins、haproxy服务器上都生成公私钥对

[root@jenkins ~]# ssh-keygen 

2、将Jenkins公钥对传给haproxy两个服务器及tomcat服务器

[root@jenkins ~]# ssh-copy-id 192.168.7.102
[root@jenkins ~]# ssh-copy-id 192.168.7.103
[root@jenkins ~]# ssh-copy-id www@192.168.7.104
[root@jenkins ~]# ssh-copy-id www@192.168.7.105

3、将两个haproxy的公钥对传到后端tomcat服务器上(www用户上)

[root@haproxy ~]# ssh-copy-id www@192.168.7.104
[root@haproxy ~]# ssh-copy-id www@192.168.7.105

7、开始写部署脚本

1、上面已经写了tomcat启动脚本,放到/etc/init.d/目录下即可,起名为tomcat,加上执行权限

2、下来编写从Jenkins拉取gitlab代码、然后进行扫描代码,停止tomcat进程,停止tomcat服务,复制代码到后端服务器,以及回滚上一个版本的代码,此脚本最好是分批次进行部署,当部署完一个服务器的时候,部署第二个服务起的时候,第一个服务器的haproxy才能加载tomcat服务。

[root@jenkins ~]# mkdir   /data/scripts/linux/ -p 在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.104"  # 指定后端tomcat服务器
     echo ${Server_IP}
  elif [[ ${GROUP_LIST} == "online-group2" ]];then
     Server_IP="192.168.7.105"  # 指定后端tomcat服务器
     echo ${Server_IP}
     ssh root@192.168.7.102 ""echo enable  server myapp/192.168.7.104" | socat stdio /var/lib/haproxy/stats"  # 当IP地址为105时,将104部署好的tomcat服务挂载到tomcat服务上。
     ssh root@192.168.7.103 ""echo enable  server myapp/192.168.7.104" | socat stdio /var/lib/haproxy/stats"  
  elif [[ ${GROUP_LIST} == "online-all" ]];then  # 同时部署两个服务器
     Server_IP="192.168.7.104 192.168.7.105"
     echo ${Server_IP}
  fi
}

function clone_code(){
  rm -rf /data/git/linux/web1  # 删除代码存放的目录,如果没有此目录,需要创建/data/git/linux目录
  cd /data/git/linux
  git clone -b ${BRANCH} git@192.168.7.100:linux_gitlab/web1.git  #切换到存放代码的目录,-b指定分支进行克隆代码
}

function scanner_code(){
  cd /data/git/linux/web1 && /usr/local/sonar-scanner/bin/sonar-scanner  # 切换到代码目录,然后对代码进行扫描,需要在Jenkins安装scanner包,一台主机去安装sonarqube包,以sonarqube用户进行启动服务
}

function make_zip(){
  cd /data/git/linux/web1/  && zip -r code.zip ./index.html  # 压缩代码
}

function down_node(){
  for node in ${Server_IP};do
    ssh root@192.168.7.102 "echo "disable server myapp/${node}" | socat stdio   /var/lib/haproxy/stats"  # 将tomcat进程下线,如果有多个进程,需要将多个进程分别进行下线
    ssh root@192.168.7.103 "echo "disable server myapp/${node}" | socat stdio   /var/lib/haproxy/stats"
  done
}

function scp_zipfile(){
  for node in ${Server_IP};do
    scp /data/git/linux/web1/code.zip  www@${node}:/data/tomcat/tomcat_appdir/code-${DATE}.zip  # 将代码传到后端存储代码压缩包的目录,并定义时间戳,放遍回滚代码
    ssh www@${node} "unzip /data/tomcat/tomcat_appdir/code-${DATE}.zip  -d /data/tomcat/tomcat_webapps/code-${DATE} && rm -rf  /data/tomcat/tomcat_webdir/myapp && ln -sv  /data/tomcat/tomcat_webapps/code-${DATE} /data/tomcat/tomcat_webdir/myapp" # 将解压后代码的路径创建软连接,指向客户要访问的代码目录,后期升级代码,只需要将前面的代码替换即可。
  done
}

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

function start_tomcat(){
  for node in ${Server_IP};do
    ssh www@${node}   "/etc/init.d/tomcat start"
    #sleep 5
  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`  # 对部署过去的代码进行测试验证,如果代码可以被访问到,就会返回200的状态码,否则就会失败
    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.102 ""echo enable  server myapp/192.168.7.104" | socat stdio /var/lib/haproxy/stats"  # 启动tomcat进程
      ssh root@192.168.7.103 ""echo enable  server myapp/192.168.7.104" | socat stdio /var/lib/haproxy/stats"    
    fi
    ##########################################
    if [ ${node} == "192.168.7.104" ];then
       echo "192.168.7.104 部署完毕,请进行代码测试!"
     #ssh root@192.168.7.102 ""echo enable server myapp/${node}" | socat stdio /var/lib/haproxy/stats"  # 如果需要在部署完192.168.7.104的主机就在haproxy挂载tomcat服务,就加上此两行。
     #ssh root@192.168.7.103 ""echo enable server myapp/${node}" | socat stdio /var/lib/haproxy/stats"
    else
      ssh root@192.168.7.102 ""echo enable  server myapp/${node}" | socat stdio /var/lib/haproxy/stats"
      ssh root@192.168.7.103 ""echo enable  server myapp/${node}" | socat stdio /var/lib/haproxy/stats"
    fi
}

function rollback_last_version(){  # 对代码进行回滚
  for node in ${Server_IP};do
   NOW_VERSION=`ssh www@${node} ""/bin/ls -l  -rt /data/tomcat/tomcat_webdir/ | awk -F"->" '{print $2}'  | tail -n1""`
   NOW_VERSION=`basename ${NOW_VERSION}`
   echo $NOW_VERSIONG
    NAME=`ssh  www@${node}  ""ls  -l  -rt  /data/tomcat/tomcat_webapps/ | grep -B 1 ${NOW_VERSION} | head -n1 | awk '{print $9}'""`
    ssh www@${node} "rm -rf /data/tomcat/tomcat_webdir/myapp && ln -sv  /data/tomcat/tomcat_webapps/${NAME} /data/tomcat/tomcat_webdir/myapp"
  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

3、脚本加上执行权限,然后对haproxy监控后端的tomcat状态页打开,实时监控后端服务器的状态

 4、在haproxy主机上用命令进行测试状态页

[root@node1 ~]# yum install socat -y # 安装socat包
[root@node1 ~]# echo "enable  server myapp/192.168.7.104" | socat stdio /var/lib/haproxy/stats  # 上线104主机

5、查看状态页,此时的192.168.7.104主机正常,说明命令正常。

6、部署脚本加上执行权限,开始执行脚本,对代码进行部署,查看测试效果

[root@jenkins linux]# pwd
/data/scripts/linux
[root@jenkins linux]# bash web_deploy.sh deploy master online-group1
[root@jenkins linux]# bash web_deploy.sh deploy master online-group2
[root@jenkins linux]# bash web_deploy.sh deploy master online-all

7、后端服务器tomcat-1的最新代码时间戳是 2020-03-10_00-00-29,而他的上一个版本是 2020-03-10_09-07-32

[root@tomcat-web1 tomcat_appdir]# cd /data/tomcat/tomcat_webapps
[root@tomcat-web1 tomcat_webdir]# ll
total 0
lrwxrwxrwx 1 www www 52 Mar 10 09:08 myapp -> /data/tomcat/tomcat_webapps/code-2020-03-10_09-07-32

8、此时可以看到后端tomcat服务器的代码时间戳,在后端服务器tomcat-2上可以看到此时的最新时间戳是03-10_00-05-19

[root@tomcat-web2 ~]# cd /data/tomcat/tomcat_webdir/
[root@tomcat-web2 tomcat_webdir]# ll
total 0
lrwxrwxrwx 1 www www 52 Mar 10 00:05 myapp -> /data/tomcat/tomcat_webapps/code-2020-03-10_00-05-19

9、我们开始对部署的代码进行回滚

[root@jenkins linux]# bash web_deploy.sh rollback_last_version  master online-group1  # 此时我们对tomcat-1主机的代码回滚
[root@jenkins linux]# bash web_deploy.sh rollback_last_version  master online-group2    # 此时我们对tomcat-2主机的代码回滚

(1)此时的tomcat-1回滚到上一个版本:2020-03-10_00-33-11

[root@tomcat-web1 tomcat_webapps]# ll
total 0
drwxrwxr-x 3 www www 17 Mar  9 21:36 code-2020-03-09_21-36-26
drwxrwxr-x 2 www www 22 Mar  9 21:41 code-2020-03-09_21-41-08
drwxrwxr-x 2 www www 22 Mar  9 21:44 code-2020-03-09_21-44-33
drwxrwxr-x 2 www www 24 Mar  9 22:32 code-2020-03-09_22-32-47
drwxrwxr-x 2 www www  6 Mar 10 00:21 code-2020-03-09_23-01-15
drwxrwxr-x 2 www www  6 Mar  9 23:08 code-2020-03-09_23-02-57
drwxrwxr-x 2 www www 24 Mar 10 00:00 code-2020-03-10_00-00-29
drwxrwxr-x 2 www www 24 Mar 10 00:33 code-2020-03-10_00-33-11  # 上一个版本的代码时间戳
drwxrwxr-x 2 www www 24 Mar 10 09:08 code-2020-03-10_09-07-32
[root@tomcat-web1 tomcat_webapps]# cd ../tomcat_webdir/
[root@tomcat-web1 tomcat_webdir]# ll
total 0
lrwxrwxrwx 1 www www 52 Mar 10 09:14 myapp -> /data/tomcat/tomcat_webapps/code-2020-03-10_00-33-11 #查看回滚后代码的时间戳

(2)回滚后,此时tomcat-2主机已经回滚到上一个版本2020-03-09_22-49-32

[root@tomcat-web2 tomcat_webapps]# ll
total 0
drwxrwxr-x 2 www www 24 Mar  9 22:35 code-2020-03-09_22-35-10
drwxrwxr-x 2 www www 24 Mar  9 22:37 code-2020-03-09_22-37-18
drwxrwxr-x 2 www www 24 Mar  9 22:39 code-2020-03-09_22-39-08
drwxrwxr-x 2 www www 24 Mar  9 22:40 code-2020-03-09_22-40-51
drwxrwxr-x 2 www www 24 Mar  9 22:44 code-2020-03-09_22-44-19
drwxrwxr-x 2 www www 24 Mar  9 22:45 code-2020-03-09_22-45-29
drwxrwxr-x 2 www www 24 Mar  9 22:46 code-2020-03-09_22-46-14
drwxrwxr-x 2 www www 24 Mar  9 22:49 code-2020-03-09_22-49-32  # 上一个版本
drwxrwxr-x 2 www www 24 Mar 10 00:05 code-2020-03-10_00-05-19
[root@tomcat-web2 tomcat_appdir]# cd ../tomcat_webdir
[root@tomcat-web2 tomcat_webdir]# ll
total 0
lrwxrwxrwx 1 www www 52 Mar 10 00:10 myapp -> /data/tomcat/tomcat_webapps/code-2020-03-09_22-49-32  #已经回滚到上一个版本
[root@tomcat-web2 tomcat_webdir]# cd ../tomcat_webapps/

以上的服务搭建好、脚本测试成功之后,我们就可以将其部署到Jenkins网页上,用来手动点点点。。。。

在Jenkins网页上创建Job

1、创建一个linux-jobs项目。

 2、开始在linux-jobs项目上部署执行脚本的选项参数和字符参数,这两个选项用的最多。Jenkins---->点击项目名称------>配置---->参数构建过程,参数选项、字符参数与脚本的执行顺序有关,不能排错顺序。

参数选项: 

名称:METHOD
选项:deploy
          rollback_last_version

字符参数:

名称:BRANCH
默认值:develop # 可以改为master,这里在构建的build时,可以修改

选项参数:

名称:GROUP_LIST

选项:
online-group1
online-group2
online-all

描述:
online-group1-192.168.7.104
online-group2-192.168.7.105
online-all-192.168.7.104/192.168.7.105

 3、点击保存,就可以看到构建的build界面了

 4、选择需要部署后端服务器信息,选择好之后就可以开始创建,SRANCH部分的develop可以修改为master。

5、部署代码的执行结果,到此,基于Jenkins拉取代码部署到后端服务器已全部完成!!!

 

posted @ 2020-03-19 15:16  一叶知秋~~  阅读(881)  评论(1编辑  收藏  举报