刚买到服务器的时候想把项目部署上去时,经常会用到各种scp、unzip之类一大堆的命令。虽然整个流程不是特别麻烦,不过学了一些Shell的命令知识之后我发现这个过程还是有优化的空间,于是大概花了几个小时完成了这样一个自动部署的脚本。
首先要解决的问题是,命令如何在远程服务器上运行,因为之前每次我都是用密码登录的,所以这个问题不解决后面的流程也就无从谈起,因此我使用了Linux下的一个expect命令,这个命令基本上就相当于是帮你自动往控制台中送输入的,于是将这个命令先封装成一个sh脚本executeCmd.sh。
#!/usr/bin/expect -f
#用途:远程执行一条任务
set user [lindex $argv 0] #用户名
set host [lindex $argv 1] #服务器地址
set password [lindex $argv 2] #服务器密码
set cmd [lindex $argv 3] #命令
spawn ssh $user@$host $cmd
#spawn $cmd
set timeout 300
expect "$user@$host's password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof
如图,基本上就是先向服务器发送命令,然后等待一段时间自动输入密码参数,再等一段时间之后退出。
实现远程命令的执行之后,就可以编写主要逻辑了,基本上的思路就是
- 停止目标服务器的tomcat工作
- 复制war文件到服务器对应目录下
- 递归删除同名文件夹
- 解压缩xxx.war <