Java web项目自动化编译打包发布脚本
Java web项目自动化编译打包发布脚本
介绍如何通过shell脚本,将上传到gitlab上的代码pull到本地,通过maven编译打包,然后将生成的war包上传到中间服务器,之后通过远程调用中间服务器上的shell脚本,将war包传到项目部署服务器上,并完成tomcat的重启。
代码发布流程
实现脚本:
总共分为本地发布脚本和中间服务器上的发布脚本,实现功能分别为:
本地脚本:
- 切换到代码目录,checkout出需要打包的分支,pull拉取该分支最新的代码
- 用maven对其进行打包成为war包
- 将war包发送到中间服务器
- 运行中间服务器上的deploy发布脚本
中间服务器上的发布脚本:
- 杀死部署服务器的tomcat进程,删除tomcat/webRoot下的ROOT.war和其解压文件
- 将从本地传到中间服务器的war包发送到部署服务器上
- 启动tomcat进程,完成部署工作。
实现代码
- 本地开发机器脚本
#!/bin/sh
if [ -z "$1" -o ! -f "$1" ]
then
echo "请输入正确的配置文件"
exit 0;
fi
source $1
echo "切换到源码目录:$source_dir"
cd $source_dir
echo "切换分支"
git checkout $branch
if [ $? -ne 0 ]
then
echo "切换分支出错,退出"
exit 1;
fi
echo "拉取最新的代码:$branch"
ret=$(git pull origin $branch)
if [ $? -ne 0 ]
then
echo "拉取失败,退出"
exit 0;
fi
echo "进行打包,配置文件为:$prop"
ret=$(mvn -P$prop clean package -DskipTests)
if [ $? -ne 0 ]
then
echo "打包失败,退出"
exit 0;
fi
echo "发送到远端ip进行批量操作,远端机器为:${duser}@$dip:$dport:$ddir"
scp -P $dport project.war ${duser}@${dip}:${ddir}/ROOT.war
echo "执行远端的批量命令"
ssh -p$dport ${duser}@${dip} "cd ${ddir};sh ${ddir}/deploy.sh"
执行参数文件
duser=admin
dip=中间服务器ip
dport=端口
ddir=war上传路径
prop=maven的属性参数文件
source_dir=项目目录
branch=项目分支
- 中间服务器脚本
#!/bin/sh
echo "关闭已有pid"
args="-h hosts -P "
pssh $args "cat /opt/app/tomcat/pid"
pssh $args "cat /opt/app/tomcat/pid | sudo kill -9 \`tee\`"
echo "删除掉已有的文件"
pssh $args "sudo rm -fr /home/admin/tomcat/webapps/ROOT"
prsync -arh hosts ROOT.war /home/admin/tomcat/webapps/
pssh $args "sudo /home/admin/tomcat/bin/startup.sh"
echo "当前pid"
pssh $args "cat /opt/app/tomcat/pid"
参数文件hosts
10.28.70.157(应用服务器ip,可以为集群)
执行: sh和bash是不同的shell,sh中没有source命令,运行:sudo bash
小白博主: 服务端是怎么接受入参、解析入参呢
会飞的猪猪@: client.table('SPLITEMETHOND_INFO') .row() .put([{key:key, column:'splitMethond:splitName',$:splitName}, {key:key, column:'splitMethond:jarName',$:jarName} ],function(err, success){ if(success) res.json({success:true}); else res.json({success:false, reason:err}); }) 李老师好,这里的row(),put()和scan()方法可以详细介绍一下吗?
StarBlues丶: 在Springboot项目之上可以进行插件式开发的框架,见连接:https://gitee.com/starblues/springboot-plugin-framework-parent
银龙gg: 您好 在吗 有点没太明白 如果单独的一个类呢 怎么办
李永昌: 搜狗日志数据下载地址:https://www.sogou.com/labs/resource/q.php