6、脚本同步svn代码打包部署

一:背景

系统在线上部署后,每次更新代码,都要手动在本机打包,然后传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.txt
cd `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_boot
elif  [ "$1" = "2" ];then
    do_vue
    echo "正在重启工程......"
    $BIN_DIR/service/scaff restart
elif  [ "$1" = "3" ];then
    do_vue
    do_spring_boot
else
    print_usage
fi

3、总结

  • 1、svn命令 需要先保存密码,然后通过svn checkout 可以从SVN拉去项目,如果项目已经存在了,则只会更新修改的代码
  • 2、maven一定要弄好本地仓库。npm也是一样的道理
  • 3、vue 工程先打包,放到webapps下,如果后端的maven工程不需要打包,则直接重启程序即可

转载于:https://my.oschina.net/liufukin/blog/2218981

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值