实现将机器A上的程序包复制到机器B并更新的脚本
一、前言
之前有写过如何在单台服务器上执行脚本自动更新程序包,但平时测试过程中相信大部分公司都是需要测试人员在服务器A上进行功能测试,测试通过后再将程序包更新到服务器B上进行安全测试或者性能测试;今天这篇文章将讲解如何将服务器A的程序包复制到服务器B,并远程登录到服务器B上执行相关脚本更新程序。
二、思路
服务器A上选择要更新的系统-->选择系统下要更新的程序并复制-->远程登录到服务器B-->服务器B上执行更新程序脚本。
三、编写相关脚本
1、服务器A上选择要更新的系统
在服务器A家目录下编写对应脚本,如图:
#!/bin/bash echo -e "\033[33m 请选择要更新的系统 \033[0m" echo -e "\033[33m 1.sp 2.blsp 3.yjs \033[0m" echo -e "\033[33m 4.tysb 5.ckyth 6.zt \033[0m" echo -e "\033[33m ------------------------------------------- \033[0m" read type if [ $type == 1 ] ; then cd 248_deploy ./sp.sh elif [ $type == 2 ] ; then cd 248_deploy ./blsp.sh elif [ $type == 3 ] ; then cd 248_deploy ./yjs.sh elif [ $type == 4 ] ; then cd 248_deploy ./tysb.sh elif [ $type == 5 ] ; then cd 248_deploy ./ckyth.sh elif [ $type == 6 ] ; then cd 248_deploy ./zt.sh else echo "您的输入有误,请正确输入" fi
2、选择某一系统要更新的程序并复制
在服务器家目录下新增一个文件夹(例子中为:248_deploy),文件夹中存放上个脚本中用到的各个系统的选择更新程序的脚本(例子中的sp.sh、yjs.sh等),如图:
上个脚本中假如选择“1”,则接下来会执行sp.sh脚本,具体如下:
#!/bin/bash warpath_133=/u01/weblogic/Middleware/user_projects/domains/base_domain/servers/AdminServer/upload warpath_248=/u01/weblogic/Middleware/user_projects/domains/webapp/ echo -e "\033[33m 请选择要更新的包 \033[0m" echo -e "\033[33m 1.ApprB 2.ApprSu 3.ApprC 4.ApprSy \033[0m" echo -e "\033[33m ------------------------------------------- \033[0m" read war echo "$warpath_133" if [ $war == 1 ] ; then war_name="ApprB" elif [ $war == 2 ] ; then war_name="ApprSu" elif [ $war == 3 ] ; then war_name="ApprC" elif [ $war == 4 ] ; then war_name="ApprSy" else echo "您的输入有误,请正确输入" fi echo -e "\033[32m 开始复制$war_name \033[0m" scp -r $warpath_133/$war_name/app/$war_name.war weblogic@19.1.0.248:$warpath_248 echo -e "\033[32m 开始远程248更新$war_name \033[0m" /usr/bin/expect ./ssh/ssh248.exp
3、远程登录服务器B执行更新程序脚本
在上个脚本中可以看到,最后一行执行了ssh文件夹下的ssh248.exp实现了远程登录服务器,因此需要在上个脚本的当前目录(例子中为248_deploy)下新增一个文件夹(SSH)并在文件夹下编写对应脚本(ssh248.exp)
#!/usr/bin/expect set timeout 300 set host "19.1.0.248" set username "weblog" set password "weblog" spawn ssh $username@$host #expect "*password*" #send "${password}\r" expect "*]$*" send "sh deploy.sh\r" expect "*]$*" send "exit\r" expect eof
4、服务器B上执行更新程序脚本
在服务器B家目录下编写上个脚本中用到的对应脚本(例子中的deploy.sh)
#!/bin/bash jdkpath=/u01/jdk1.8.0_11 weblogicpath=/u01/weblogic/Middleware/wlserver_10.3 export CLASSPATH=$jdkpath/lib/tools.jar:$weblogicpath/server/lib/weblogic_sp.jar:$weblogicpath/server/lib/weblogic.jar:$weblogicpath/server/lib/webservices.ja$weblogicpath/../oracle_common/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-contrib.jar:$weblogicpath/modules/features/oracle.wls.common.nodemanager_1.0.0. # 获取目录下日期最新的war包 war=`ls /u01/weblogic/Middleware/user_projects/domains/webapp -t |head -n 1` echo -e "\033[32m ${war%.*}开始更新 \033[0m" java weblogic.Deployer -adminurl t3://19.1.0.248:7001 -user weblogic -password weblogic123 -name ${war%.*} -targets AdminServer -redeploy echo -e "\033[32m ${war%.*}更新完成 \033[0m"
以上完成从机器A将程序包复制到机器B并更新的相关操作。
上面的例子中对应程序包是通过控制台进行更新,如果程序为前端包或者微服务接口也大同小异,脚本中做一些变更即可。