脚本使用的是expect,如果提示没有该命令,yum一下即可。
yum install -y expect
发布流程:maven打包上传到中间层服务器 , 再由中间层服务器,通过以下脚本执行发布到生产服务器的tomcat -> webapps目录下。
#!/usr/bin/expect
spawn scp -P 22 /opt/demo/td-webapp.war [email protected]:/opt/apache-tomcat-8.5.55/webapps
expect {
"yes/no" { send "yes\r"; exp_continue }
"*assword" { set timeout 300; send "\[Vj\(123\&123\r" }
}
expect eof
spawn scp -P 22 /opt/demo/td-webapp.war [email protected]:/opt/apache-tomcat-8.5.55/webapps
expect {
"yes/no" { send "yes\r"; exp_continue }
"*assword" { set timeout 300; send "q\?\>1234565\{\r" }
}
expect eof
spawn scp -P 22 /opt/demo/td-webapp.war [email protected]:/opt/apache-tomcat-8.5.55/webapps
expect {
"yes/no" { send "yes\r"; exp_continue }
"*assword" { set timeout 300; send "J\^78\$123\)456\r" }
}
expect eof
exit
上面,第一步传输到各台服务器上后,接下来就是部署,当然命令可以全部写在一个文件,这里把它分开三个部分,方便维护,以下通过expect的 SSH操作,进行部署
#!/usr/bin/expect
set HOST_1 "192.168.32.101"
set PWD_1 "123456789"
set HOST_2 "192.168.32.102"
set PWD_2 "123456789"
set HOST_3 "192.168.32.103"
set PWD_3 "123456789"
spawn ssh root@$HOST_1
set timeout 60
expect {
"yes/no" { send "yes\n" ; exp_continue }
"password:" { send "$PWD_1\n" }
}
expect "#"
send "sh /opt/demo/run.sh \r"
expect "#"
send "exit \r"
expect eof
spawn ssh root@$HOST_2
set timeout 60
expect {
"yes/no" { send "yes\n" ; exp_continue }
"password:" { send "$PWD_2\n" }
}
expect "#"
send "sh /opt/demo/run.sh \r"
expect "#"
send "exit \r"
expect eof
spawn ssh root@$HOST_3
set timeout 60
expect {
"yes/no" { send "yes\n" ; exp_continue }
"password:" { send "$PWD_3\n" }
}
expect "#"
send "sh /opt/demo/run.sh \r"
expect "#"
send "exit \r"
expect eof
exit
上面,SSH登录目标服务器执行 run.sh如下:
#!/bin/bash
# 找到tomcat所有进程并kill掉
ps -ef | grep apache-tomcat | grep -v grep | awk '{print $2}' | sed -e "s/^/kill -9 /g" | sh -
# 删除td-webapp目录
if [-d /opt/apache-tomcat-8.5.55/webapps/td-webapp ];
then
rm -rf /opt/apache-tomcat-8.5.55/webapps/td-webapp /opt/apache-tomcat-8.5.55/webapps/td-webapp#parallel
fi
# 启动tomcat
sh /opt/apache-tomcat-8.5.55/bin/startup.sh
# 打印tomcat日志
tail -f /opt/apache-tomcat-8.5.55/logs/catalina.out
踩茅坑次数有:
- 执行expect命令,文件顶部为 #! /usr/bin/expect 并且不能用sh ./demo.sh 而是直接 ./demo.sh;
- 带有 "{}()#$&%"等字符的密码,在其前面得加上转义字符 "\" ,如: " \%66721321\{" ;
- 学习expect时候,了解其变量赋值方式如 ,set PWD_1 = "123456789" 这是习惯性错误,正确应该是 set PWD_1 "123456789" 。