基于Shell脚本的Linux下Javaweb项目一键部署
程序员文章站
2022-05-24 20:09:24
...
刚买到服务器的时候想把项目部署上去时,经常会用到各种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 aaa@qq.com$host $cmd
#spawn $cmd
set timeout 300
expect "aaa@qq.com$host's password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof
如图,基本上就是先向服务器发送命令,然后等待一段时间自动输入密码参数,再等一段时间之后退出。
实现远程命令的执行之后,就可以编写主要逻辑了,基本上的思路就是
- 停止目标服务器的tomcat工作
- 复制war文件到服务器对应目录下
- 递归删除同名文件夹
- 解压缩xxx.war
- 运行tomcat
- 进入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 aaa@qq.com$host:$targetPath
#spawn $cmd
set timeout 300
expect "aaa@qq.com$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 项目名
最后贴一张运行图:
推荐阅读
-
script_tool_for_linux.bash: Linux 环境下的 hosts 一键部署脚本
-
Linux下实现SNMP一键安装的Shell脚本
-
Linux下实现SSH免密码登录和实现秘钥的管理、分发、部署SHELL脚本分享
-
基于linux下的shell脚本
-
基于linux下的shell 常用的控制语句及脚本运行控制
-
基于Shell脚本的Linux下Javaweb项目一键部署
-
script_tool_for_linux.bash: Linux 环境下的 hosts 一键部署脚本
-
javaweb-我的java web项目部署到linux下遇到的mysql问题
-
javaweb-我的java web项目部署到linux下遇到的mysql问题
-
LINUX 下的 shell 脚本——应用实例和项目