基于Shell脚本的Linux下Javaweb项目一键部署

刚买到服务器的时候想把项目部署上去时,经常会用到各种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

如图,基本上就是先向服务器发送命令,然后等待一段时间自动输入密码参数,再等一段时间之后退出。

实现远程命令的执行之后,就可以编写主要逻辑了,基本上的思路就是

  1. 停止目标服务器的tomcat工作
  2. 复制war文件到服务器对应目录下
  3. 递归删除同名文件夹
  4. 解压缩xxx.war
  5. 运行tomcat
  6. 进入logs中,tail -f catalina.out 查看日志文件

其中,复制war文件到服务器对应目录这一步也需要输入用户名和密码,因此我们需要为它也专门写一个脚本文件来进行处理,命名为copyFile.sh,用于远程复制文件

#!/usr/bin/expect -f
#用途:远程复制文件
set user [lindex $argv 0]    #用户名
set host [lindex $argv 1]    #服务器地址
set password [lindex $argv 2]    #密码
set locaFile [lindex $argv 3]    #本地文件
set targetPath [lindex $argv 4]    #目标路径

spawn scp $locaFile $user@$host:$targetPath
#spawn $cmd
set timeout 300
expect "$user@$host's password:"
set timeout 300         
send "$password\r"
set timeout 300 
send "exit\r"
expect eof

基本原理和executeCmd.sh那个脚本一样。

实现这两个子脚本之后就可以实现主要逻辑了,新建文件deploy.sh,代码如下:

#!/bin/bash
#文件名: deploy.sh
#用途:向tomcat部署项目

user='xxxx'
tomcatLoca='/home/tomcat/apache-tomcat-7.0.78' #远程计算机tomcat的路径
host='xxx.xx.xxx.xx'	#远程主机的地址
password='xxxxxxxx'	#密码
filename=$1	#文件名称
curLoca=`pwd`	#当前目录
#echo 当前目录为$curLoca
#首先停止远程主机上tomcat的正常工作
executeCmd.sh $user $host $password $tomcatLoca/bin/shutdown.sh
#远程复制war到webapps目录下
copyFile.sh $user $host $password $curLoca/$filename.war $tomcatLoca/webapps
#递归删除同名文件夹
executeCmd.sh $user $host $password rm\ -rf\ $tomcatLoca/webapps/$filename
#远程解压文件
executeCmd.sh $user $host $password unzip\ $tomcatLoca/webapps/$filename.war\ -d\ $tomcatLoca/webapps/$filename
#运行tomcat
executeCmd.sh $user $host $password $tomcatLoca/bin/startup.sh
#查看日志文件
executeCmd.sh $user $host $password tail\ -f\ $tomcatLoca/logs/catalina.out

这样整体功能就完成了,使用时,需要把user、tomcatLoca等变量的值改成自己的情况,然后用如下方式调用(切记不要加.war,该脚本可以再优化一下就是判断参数中是否有.war,不过用习惯了也无所谓):

deploy.sh 项目名

最后贴一张运行图:

运行情况

猜你喜欢

转载自blog.csdn.net/zekdot/article/details/82464485