实现将机器A上的程序包复制到机器B并更新的脚本

一、前言

之前有写过如何在单台服务器上执行脚本自动更新程序包,但平时测试过程中相信大部分公司都是需要测试人员在服务器A上进行功能测试,测试通过后再将程序包更新到服务器B上进行安全测试或者性能测试;今天这篇文章将讲解如何将服务器A的程序包复制到服务器B,并远程登录到服务器B上执行相关脚本更新程序。

二、思路

服务器A上选择要更新的系统-->选择系统下要更新的程序并复制-->远程登录到服务器B-->服务器B上执行更新程序脚本。

三、编写相关脚本

1、服务器A上选择要更新的系统

在服务器A家目录下编写对应脚本,如图:

#!/bin/bash
echo -e "033[33m 请选择要更新的系统 33[0m" 
echo -e "33[33m 1.sp       2.blsp      3.yjs      33[0m" 
echo -e "33[33m 4.tysb     5.ckyth     6.zt        33[0m" 
echo -e "33[33m ------------------------------------------- 33[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 请选择要更新的包 33[0m" 
echo -e "33[33m 1.ApprB     2.ApprSu    3.ApprC     4.ApprSy 33[0m" 
echo -e "33[33m ------------------------------------------- 33[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 33[0m"
scp -r $warpath_133/$war_name/app/$war_name.war weblogic@19.1.0.248:$warpath_248
echo -e "33[32m 开始远程248更新$war_name 33[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}
"
expect "*]$*"
send "sh deploy.sh
"
expect "*]$*"
send "exit
"
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%.*}开始更新 33[0m"
java weblogic.Deployer -adminurl t3://19.1.0.248:7001 -user weblogic -password weblogic123 -name ${war%.*} -targets AdminServer -redeploy
echo -e "33[32m ${war%.*}更新完成 33[0m"

以上完成从机器A将程序包复制到机器B并更新的相关操作。

上面的例子中对应程序包是通过控制台进行更新,如果程序为前端包或者微服务接口也大同小异,脚本中做一些变更即可。

原文地址:https://www.cnblogs.com/dnjiang/p/12931928.html