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