腳本使用的是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" 。