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拉取代码部署到后端服务器已全部完成!!!