环境介绍
线上环境使用的微服务的一套治理方案,由于把所有的模块全都放到一台机器上,启动的时候是通过java jar的方式进行启动,所以整个过程就非常的简单和清晰,大概思路如下:
- 拉取git仓库代码
- 通过maven打包构建
- 将jar包同步到目标主机上
- 执行目标主机上的java程序
实现过程
配置Jenkins
此过程需要安装Jenkins的一些插件,例如Git Parameter,Extended Choice Parameter Plugin 过程如下图:
还需要配置jdk和maven,这里不再赘述,截图如下:
创建一个任务
创建一个自由风格的任务
设置参数,在构建时可以选择分支
设置参数,在构建时可以选择要发布的模块
设置好NAME,以及Parameter type为Check Boxes,Number of Visible Items要显示的数量,有多少就写多少,Delimter设置分隔符,这里设置的是空格,后面的Value是要发布的模块名,有什么就写什么,后面也可以设置默认的value,构建时会自动勾选 设置git仓库的地址,注意$BRANCH
最后就是设置执行的脚本
脚本参考
代码语言:javascript复制# cat start_server.sh
#!/bin/bash
basedir="/export/server/pangolin-server"
DATE=`date " %Y%m%d%H%M"`
JAVA_BIN=`which java`
#pangolin-service-eureka-0.0.1-SNAPSHOT.jar
#nohup java -Xms128m -Xmx128m -jar pangolin-service-eureka-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &
module_list=(
business
common
dataimp
eureka
file
reminder
target
zuul
)
stop() {
module_name=$1
jar_name="pangolin-service-${module_name}-0.0.1-SNAPSHOT.jar"
module_pro=$(ps -ef | grep "$jar_name" | grep -v grep | wc -l)
if [ $module_pro -ne 0 ]
then
ps -ef | grep "$jar_name" | grep -v grep | awk '{print $2}' | xargs kill -9 2>&1
if [ `ps -ef | grep "$jar_name" | grep -v grep | wc -l` -eq 0 ];then
echo "$module_name module stop successful."
else
echo "$module_name module stop faild."
fi
fi
}
check() {
module_name=$1
if test ! -d ${basedir}/service/${module_name}-server;then
mkdir ${basedir}/service/${module_name}-server -p
fi
}
start() {
module_name=$1
jar_name="pangolin-service-${module_name}-0.0.1-SNAPSHOT.jar"
module_pro=$(ps -ef | grep "$jar_name" | grep -v grep | wc -l)
while true
do
if [ $module_pro -eq 0 ]
then
check $module_name
cd ${basedir}/service/${module_name}-server
if test ! -d backup;then
mkdir backup
mv ${jar_name} backup/${jar_name}_old_$DATE
fi
cp ${basedir}/${jar_name} ${basedir}/service/${module_name}-server/
nohup $JAVA_BIN -Xms128m -Xmx128m -jar $jar_name > /dev/null 2>&1 &
if [ `ps -ef | grep "$jar_name" | grep -v grep | wc -l` -ne 0 ];then
echo "$module_name start successful."
break
fi
else
stop $module_name
fi
done
}
if [ $# -ne 0 ];then
for line in $@
do
start $line
done
else
echo "Usage: sh $0 $module_list[*]"
exit 0
fi
就是一个简单的启动脚本,启动时需要传入模块名的参数,多个时以空格分隔
构建任务示例
可以选择一个或多个进行发布