Jenkins单节点自动化部署

 

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了。。该问题折腾了我一个下午。。

1.启动 Jenkins 的时候加上 -Dhudson.util.ProcessTree.disable=true,也就是 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war
2.在后台进程前加上 BUILD_ID=dontKillMe,也就是 BUILD_ID=dontKillMe nohup npm start >/var/app/nohup.out 2>&1 &
 
================-----------------------============
jar执行脚本

#将应用停止
#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 &

 

posted @ 2018-08-20 09:32  jimw  阅读(1138)  评论(0编辑  收藏  举报