一:背景
系统在线上部署后,每次更新代码,都要手动在本机打包,然后传jar到bin下,最后还要重启程序,步骤繁琐。现在通过一个脚本集中吧这些事情都实现
- 1、从svn checkout代码过来
- 2、利用maven打包源码,得到target/xxx.jar
- 3、mv target/xxx.jar 到 工程安装的bin下
- 4、重启程序
注意: 前提是一定要安装好maven和node以及npm,并且配置好maven环境,使得mvn 命令可以使用。
二:脚本代码
#!/usr/bin/env bash# 获取关键路径, $0 的结果是autodeploy.sh ,没有前面的路径!# dirname 获取文件所在的文件夹,也就是上一层。比如/root/abc/text.txt ==> /root/abc# basename 获取的是最后这一层名称(文件或者文件夹名称)。 比如/root/abc/text.txt ==> text.txtcd `dirname $0`BIN_DIR=`pwd`cd ..DEPLOY_DIR=`pwd`do_spring_boot(){ SVN_PATH=https://192.168.0.193/svn/ga/02dashuju/09-ga-base/02code/ga-commons/ga-mass-scaff CHECKOUT_DIR=/temp/projectsources/`basename $DEPLOY_DIR` # 创建路径,并同步svn代码 if [ ! -d $CHECKOUT_DIR ]; then mkdir -p $CHECKOUT_DIR fi svn checkout $SVN_PATH $CHECKOUT_DIR # 调用工程中sbin下的package.sh脚本进行打包 sh $CHECKOUT_DIR/sbin/package.sh # 循环检测target,直到上面脚本打包成功,然后退出 while true; do echo "正在检测打包结果......" if [ -e $CHECKOUT_DIR/target/*.jar ]; then break fi sleep 3 done # 删除本工程bin下的bootstrap.jar,并cp上面打包的jar过来 echo "copy jar 到工程部署对应目录下......" rm -rf $BIN_DIR/bootstrap.jar cp $CHECKOUT_DIR/target/*.jar $BIN_DIR/bootstrap.jar # 重启本工程 echo "正在重启工程......" $BIN_DIR/service/scaff restart}do_vue(){ SVN_PATH=https://192.168.0.193/svn/ga/02dashuju/09-ga-base/02code/ga-commons/ga-mass-scaff-web CHECKOUT_DIR=/temp/projectsources/`basename $DEPLOY_DIR`-web # 创建路径,并同步svn代码 if [ ! -d $CHECKOUT_DIR ]; then mkdir -p $CHECKOUT_DIR fi svn checkout $SVN_PATH $CHECKOUT_DIR # 调用工程中sbin下的package.sh脚本进行打包 cd $CHECKOUT_DIR npm install npm run build # 循环检测target,直到上面脚本打包成功,然后退出 while true; do echo "正在检测打包结果......" if [ -e $CHECKOUT_DIR/dist ]; then break fi sleep 3 done # 删除本工程bin下的bootstrap.jar,并cp上面打包的jar过来 echo "copy dist 到工程conf/webapps下......" rm -rf $DEPLOY_DIR/config/webapps/* cp -r $CHECKOUT_DIR/dist/* $DEPLOY_DIR/config/webapps/}# 使用操作说明print_usage (){ echo "Usage: sh bin/autodeploy.sh COMMAND" echo "where COMMAND is one of the follows:" echo " -> 1(只更新后端工程)|2(只更新前端vue工程)|3(前后端都更新)" exit 1}if [ "$1" = "1" ];then do_spring_bootelif [ "$1" = "2" ];then do_vue echo "正在重启工程......" $BIN_DIR/service/scaff restartelif [ "$1" = "3" ];then do_vue do_spring_bootelse print_usagefi
3、总结
- 1、svn命令 需要先保存密码,然后通过svn checkout 可以从SVN拉去项目,如果项目已经存在了,则只会更新修改的代码
- 2、maven一定要弄好本地仓库。npm也是一样的道理
- 3、vue 工程先打包,放到webapps下,如果后端的maven工程不需要打包,则直接重启程序即可