最近玩springboot,自己有一个服务器,写完了都放到服务器去部署,刚开始用的gui-manager方式,但是慢慢的发现,这个方法部署太慢了。大家都知道一般的小水管宽带的上传也就70k左右,部署一次等n久。于是想着能不能自动部署,每次把代码提交即可。经过查找资料结合自身已有的了解,找到了Jenkins,很强大,但是配置什么的略微麻烦,看网上的教程貌似也要编写脚本,于是想着何不自己直接撸个脚本算了,于是各种查找各种学脚本,于是有了如下简单的部署脚本,在结合crontab任务,基本可以满足自己的需求了。
贴出脚本代码如下:
脚本autodeploy.sh
#!/bin/sh
# Tomcat的webapps地址
tomcat_webapps_path=/usr/local/apache-tomcat-9.0.0.M18/webapps/
# github 项目地址
github_url=git@github.com:megoc/springboot-mybatis.git
#截取"/"右边的
tmp=${github_url##*/}
#截取"."左边的
project_name=${tmp%%.*}
echo "========="$project_name===============
#没有更新标志
b="Already"
c="up-to-date"
#判断是否已经clone 过了
if [ ! -d "$project_name" ]
then
rm -rf $project_name
#获取命令执行的结果
a=$(git clone $github_url 2>&1)
cd $project_name
echo $a
else
cd $project_name
echo "=========begin git pull============"
#获取pull的结果
a=$(git pull origin master 2>&1)
echo $a
fi
#如果结果中包含相关的字段,则认为没有更新,退出不进行打包部署
echo $a
echo $b
echo $c
#输出字符串是否包含关键字更新
if [[ $a =~ $b ]]
then
echo ------------no update-------------
exit 0
elif [[ $a =~ $c ]]
then
echo ------------no update-------------
exit 0
fi
echo "============begin package=========="
rm -rf target
#开始打包
mvn package
cd target/
#开始部署,此方式不妥当,应该通过gui进行部署,有兴趣的自己实现
#停止Tomcat服务
systemctl stop tomcat
rm -rf ${tomcat_webapps_path}"ROOT"
#移动到Tomcat目录下并自动命名
mv -u *.war ${tomcat_webapps_path}"ROOT.war"
#重启Tomcat服务
systemctl start tomcat
echo "=============deploy end============="
脚本略显简陋,毕竟不是专业。
脚本运行前提
- 安装JDK JDK和Tomcat安装
- 安装git并配置git的SSH登录
- maven 安装,最简单方式
yum install maven
也可以到官网自己去下载安装包配置
脚本使用方式:
- 在任何目录下新建脚本文件
vi autodeploy.sh
- 复制以上脚本粘贴,并修改Tomcat的webapps的路径为你自己服务器上的路径,同时修改GitHub的项目地址,还有你的Tomcat的服务器的启动(systemctl start tomcat)和停止(systemctl stop tomcat)指令,和我一样的不需修改
- 保存退出,执行指令确保脚本可运行
chmod +x autodeploy.sh
- 手动运行脚本
#在脚本所处目录
./autodeploy.sh
- 配置定时任务--crontab定时任务配置
#每30分钟执行一次脚本,根据自己需求改
*/30 * * * * /root/autodeploy.sh
大工告成,现在只要提交到GitHub上即可,等时间一到或者直接登录服务器运行脚本即可自动部署项目了。
提示:
本脚本运行于CentOS 7 其他环境未测试。