centos linux SpringCloud项目 bash shell脚本打包、发布,一站搞定

1、安装git

yum install git

2、安装maven

yum install maven

 3、修改maven仓库地址和镜像为国内源,速度快的飞起

 vim /etc/maven/settings.xml

     将以下代码放入<mirrors>内:

    <mirror>       <!--阿里云仓库-->
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
    <mirror>    <!--maven国内镜像-->
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

    修改完成(注意不要放到注释里): 

4、到这里,git、maven都已经安装好了 ,下面来编写build shell。以下脚本实现了SpringCloud项目拉取,并把目录下所有module逐个打包的操作。

#!/bin/bash

CURR_PATH=`pwd`

# 转义git 用户名和密码,防止其中的特殊字符影响git命令执行
USRNM=$(echo "你git的用户名" | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g')
PSW=$(echo "你git的密码" | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g')

# 获取传入的第一个参数作为项目名,这里是我的SpringCloud项目名
PNM=$1

#如果项目名长度为0,提示信息并退出,否则继续执行。-z 是字符串运算符,长度为0,返回true。
if [ -z $PNM ]
then
 echo "project name is necessary"
 exit
else
  echo "building project:${PNM}"
fi

#我的项目运行的目录,jar文件在这里启动运行。
CURR_SERVER_PATH="/webserver/server/${PNM}/"

#获取当前目录,我的脚本文件放在SpringCloud项目上一级目录。
CURR_PATH=`pwd`

#如果当前项目文件夹存在即SpringCloud项目已存在。 -d 文件运算符,存在则返回true
if [ -d $PNM ]
then
		# SpringCloud目录存在,进入该目录,并执行git命令拉去代码
        echo 'directory is existing'
        cd $PNM
        git pull origin master
else
		#SpringCloud目录不存在,证明项目还没有从git克隆,使用git命令克隆项目,然后进入该目录
        echo 'directory is not existing, clone ...'
        git clone master https://${USRNM}:${PSW}@github.com/Zilong217/${PNM}.git
        cd $PNM
fi

# 遍历SpringCloud目录下所有的子目录。也就是SpringCloud项目的module,挨个进行打包操作。
for d in `ls`
do
  # 如果当前文件是一个目录,则进入打包流程
  if [ -d $d ]
  then
    echo "==============[${d}] is been building======================"

    #进入该目录
    cd ${d}
    echo "current path is `pwd`"

    # 执行mvn打包命令,skipTests跳过test阶段。-D:是参数的起始值,表名后续值是一个参数
    mvn clean package -DskipTests

    # 如果该项目运行目录不存在,则创建相应目录
    if [ ! -d ${CURR_SERVER_PATH}/$d ]
    then
      echo "$CURR_SERVER_PATH is not exists, create ..."
      mkdir -p ${CURR_SERVER_PATH}/$d
    fi

    # 移除旧jar包,复制新jar包过去
    echo "=============copy jar====================="
    rm -f ${CURR_SERVER_PATH}/${d}/${d}-0.0.1-SNAPSHOT.jar
    cp ./target/${d}-0.0.1-SNAPSHOT.jar ${CURR_SERVER_PATH}/$d

    #切换到上级目录(如果不切换回循环的原目录,-d $d 判断就会为false,因为-d是基于当前所在目录进行判断的。)
    cd ..
  else
    echo "================${d} is not a directory=========================="
  fi
done

注:该shell脚本还不完善,仅供shell脚本编写思路和语法参考,不要复制粘贴生搬硬套到自己项目里。

5、启动脚本

#!/bin/bash

# 通过参数获取项目名,这里是SpringCloud项目下的module名
P_NM=$1

# 如果项目名长度是0,则退出
if [ -z $P_NM ]
then
  echo "input project name please, like:./startup.sh pnm"
  exit
fi

# 检测是否已经启动。-C java:以java命令启动的进程。awk {'print $2'}:以空格或tab分割字符串,并输出第二项(pid)
PID=`ps -f -C java | grep  ${P_NM}-0.0.1-SNAPSHOT.jar | awk {'print $2'}`
if [ -n $PID ]
then
  echo "server is running, PID: $PID"
  exit
fi


echo "$P_NM starting..."

# 切换到module目录
cd $P_NM

# 启动 nohup和&同时使用,进程与命令窗口脱离关系,完全后台运行,只能通过kill pid来关闭
nohup java -jar ${P_NM}-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &

# 监控日志
tailf nohup.out

6、停止脚本

#!/bin/bash

# 根据第一个参数获取module名
PNM=$1

# 切换到module目录
cd $PNM

# 判断jar包是否存在。 -f:文件运算符,如果文件存在,返回true
if [ ! -f ${PNM}-0.0.1-SNAPSHOT.jar ]
then
  echo "jar not found"
  exit
fi

# 判断服务是否正在运行
PID=`ps -f -C java | grep ${PNM}-0.0.1-SNAPSHOT.jar | awk {'print $2'}`
echo "pid is $PID"

# 如果PID长度为0,则证明服务没有启动,否则杀死进程
if [ -z $PID ]
then
  echo "server does not start ..."
  exit
else
  kill $PID

  #等待4秒
  sleep 4s

  # 再次查询进程号,存在则停止失败,不存在则证明停止成功
  PID=`ps -f -C java | grep ${PNM}-0.0.1-SNAPSHOT.jar | awk {'print $2'}`
  if [ -z $PID ]
  then
    echo "server has stoped"
  else
    echo "server stop fail"
  fi
fi

以上,就是SpringCloud项目拉取代码、清除缓存、编译、打包、停止服务、启动服务的全部脚本,仅供参考,如有问题,欢迎指正。

参考技术文档:https://www.runoob.com/linux/linux-shell.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗九趁年华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值