Jenkins可以满足实现程序自动化部署。并且可定制化脚本执行以及跟着发布情况
其中具体的Jenkins构建可以根据指引:
https://www.cnblogs.com/YatHo/p/6647561.html?utm_source=itdadao&utm_medium=referral
我对Jenkins实现了优化。
采用两步走,build code,然后在进行构建code。这样可以避免在clone 代码的时候,发现仍然有坑,获取需要跟其他的开发协同合并分支才能进行发布,但是呢,前者已经build了,后者还没执行构建,那么就可以实现两步走来防范如上情况出现。
一:build code
脚本如下:
#!/bin/bash
# 先判断文件是否存在,如果存在,则备份
echo "复制备份....${WORKSPACE}/${BUILD_PATH}/target/"
IFS='- ' read -r -a array <<< "{BUILD_NAME}"
file="/home/xxxx/jenkins/jekins-web/${BUILD_NAME}.jar"
newfile="${WORKSPACE}/${BUILD_PATH}/target/${BUILD_NAME}.jar"
if [ ! -f "$newfile" ]
then
echo "${BUILD_NAME} jar没有打包成功!"
exit 0
fi
if [ -f "$file" ]
then
mkdir -p /home/xxxx/jenkins/jekins-web/bak/
mv $file /home/xxxx/jenkins/jekins-web/bak/${BUILD_NAME}.jar.`date +%Y%m%d%H%M%S`
fi
mv $newfile /home/xxxx/jenkins/jekins-web/${BUILD_NAME}.jar
该脚本支持单个项目部署以及maven聚合模块部署。
注:启动如果没加参数,那么就会出现构建的时候将Jenkins部署的服务都自动给kill了。。该问题折腾了我一个下午。。
#将应用停止
#stop.sh
#!/bin/bash
echo "停止应用服务...$1"
pid=`ps -ef | grep $1.jar | grep -v grep |awk '{print $2}'`
echo "ps -ef | grep $1.jar | grep -v grep "
if [ -n "$pid" ]
then
echo "$pid is kill"
kill $pid
sleep 2
fi
#新建日志目录
mkdir -p /home/xxxx/logs/$1
#startup.sh 启动项目
#!/bin/sh
echo "授予当前用户权限"
chmod 777 /home/xxxx/jenkins/jekins-web/$1.jar
echo "执行....."
BUILD_ID=dontKillMe nohup nice /home/xxxx/java/jdk1.8/bin/java -Xms128m -Xmx128m -XX:MaxPermSize=128m -Dapp.id=$1 -Denv=dev -Ddev_meta=http://127.0.0.1:8080 -jar /home/xxxx/jenkins/jekins-web/$1.jar > /home/xxxx/logs/$1/application.log 2>&1 &
补充:
启动脚本,切记,在微服务中需要安全结束进程,如果直接强制kill,那么服务发现将会收不到对应的通知该服务的消息,服务发现会误以为该服务的实例仍然存在,因此需要安全杀进程
#将应用停止
#stop.sh
#!/bin/bash
#echo "停止应用服务...$1"
pid=`ps -ef | grep $1.jar | grep -v grep |awk '{print $2}'`
#定义整型变量
a=1
while [ $pid -gt 1 ]
do
echo "开始,第$a次"
sleep 3
pid=`ps -ef | grep $1.jar | grep -v grep |awk '{print $2}'`
let a++
if [ $a -eq 20]
#直接强制kill
then
kill -9 $pid;
echo "第$a次直接强制kill";
fi;
echo "第$a次=======kill:$pid==========";
kill $pid;
done
echo "yes!执行完毕"
#新建日志目录
mkdir -p /home/visa_equity/logs/$1
#startup.sh 启动项目
#!/bin/sh
echo "授予当前用户权限"
chmod 777 /home/visa_equity/jenkins/jekins-web/$1.jar
echo "执行....."
BUILD_ID=dontKillMe nohup nice /home/visa_equity/java/jdk1.8/bin/java -Xms128m -Xmx128m -XX:MaxPermSize=128m -Dapp.id=$1 -Denv=dev -Ddev_meta=http://172.16.2.152:8080 -jar /home/visa_equity/jenkins/jekins-web/$1.jar > /home/visa_equity/logs/$1/application.log 2>&1 &