场景:
linux中部署spring cloud项目时,没有必要使用持续构建时,需要简单的脚本实现自动的打包和部署。脚本:
1、start-service.sh是java命令启动项目脚本,基础运行脚本。
#!/bin/bash
# jar包目录
SERVER_PATH=/home/xxx
# jar包名称
RESOURCE_NAME=com-proj-${1}-0.0.1-SNAPSHOT.jar
echo start $RESOURCE_NAME service!
# 杀死进程
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
# 检测是否还在运行
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'App is running.'
else
echo 'App is NOT running.'
fi
# 运行jar包,需要自定义参数的在case中自定义
rm -f tpid
cd ${SERVER_PATH}
case ${1} in
'zuul') nohup java -server -Xms512m -Xmx768m -jar ./$RESOURCE_NAME --spring.profiles.active=test >/dev/null 2>&1 &
;;
'eureka') nohup java -server -Xms512m -Xmx768m -jar ./$RESOURCE_NAME --spring.profiles.active=test >/dev/null 2>&1 &
;;
*) nohup java -jar ./$RESOURCE_NAME --spring.profiles.active=test >/dev/null 2>&1 &
;;
esac
echo Start Success!
2、package-run.sh是Git或SVN指定版本运行更新maven打包的脚本。
#!/bin/sh
# 源代码位置,并且已经拉过一次代码
CODE_PATH=/home/xxx/code/proj
# jar包运行目录
SERVER_PATH=/home/xxx/api
# 获取版本
version=
while getopts ":v:" opt
do
case $opt in
v)
version=$OPTARG
;;
?)
echo "未知参数"
;;
esac
done
# 根据版本拉取代码(这里是SVN版本,如果是Git请自行替换)
cd ${CODE_PATH}
if [ ! $version ]; then
echo "开始拉取最新代码"
svn update
else
shift 2
echo "开始拉取代码版本:$version "
svn up -r $version
fi
# 拼接包名称
packages=''
for i in $(seq 1 $#)
do
eval j=\$$i
packages=${packages}com-proj-$j,
done
# 编译打包
echo "开始编译${packages}"
mvn clean package -DskipTests -pl ${packages} -am
# 复制运行程序
cd ~
for i in $(seq 1 $#)
do
eval j=\$$i
echo "复制文件 com-proj-$j-0.0.1-SNAPSHOT.jar"
# 如果文件夹不存在,创建文件夹
if [ ! -d "${SERVER_PATH}/com-proj-$j" ]; then
mkdir ${SERVER_PATH}/com-com-proj-$j
fi
\cp -rf ${CODE_PATH}/com-proj-$j/target/com-proj-$j-0.0.1-SNAPSHOT.jar ${SERVER_PATH}/com-proj-$j-0.0.1-SNAPSHOT.jar
# 调用上一个脚本启动项目
./start-service.sh $j
done
3、start-all.sh是一个扩展脚本,为了不更新打包而重启多个项目的脚本。
cd ~
for i in $(seq 1 $#)
do
eval j=\$$i
./start-service.sh $j
done
使用:
确保三个脚本在同一目录下,配合使用,以zuul,eureka为例
# 仅仅重启一个项目,不需要更新Git和重新打包
./start-service.sh zuul
# 需要重启多个项目,不需要更新Git和重新打包
./start-all.sh zuul eureka
# 需要更新Git和重新打包,不指定版本
./package-run.sh zuul eureka
# 需要更新Git和重新打包,指定版本(Git,SVN版本)
./package-run.sh -v 2022 zuul eureka
此脚本请根据需要修改后使用,不可直接用于生产环境。其中的命令参数和目录名根据需要修改,例如kill -9等。