记:jsp项目写一个自动化部署脚本,来解决多台负载分别部署的痛苦

脚本使用的是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" 。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章