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项目拉取代码、清除缓存、编译、打包、停止服务、启动服务的全部脚本,仅供参考,如有问题,欢迎指正。