环境说明:
- 技术栈:svn + maven + jdk1.8 + springboot + Jenkins + linux shell
- Jenkins插件:Subversion + Maven Integration plugin + Publish over SSH
- Jenkins所在主机:192.168.122.5
- 项目部署服务器:192.168.122.4
准备条件:
- Jenkins系列教程一:Linux上部署Jenkins
- Jenkins系列教程四:配置jdk、maven
- Jenkins系列教程五:Jenkins安装Maven项目插件:Maven Integration plugin
- Jenkins系列教程六:Jenkins安装Publish over SSH插件并配置
- Jenkins系列教程七:Jenkins安装svn插件并配置
一、新建一个自由风格项目
新建任务:tes-rollback
二、丢弃策略
三、配置参数化构建过程
3-1、添加选项参数
勾选 This project is parameterized -> 添加参数 -> Choice Parameter
按下图设置参数:
3-2、添加字符参数
添加参数 -> 选择 String Prameter
按下图设置参数:
四、源码管理
4-1、填写项目的svn地址
源码管理 -> 选中Subversion -> 填写项目的svn地址
注意:svn地址后面追加 @HEAD 将每次拉取最新的代码
4-2、输入svn用户名、密码
4-3、选择配置的用户
五、配置构建步骤
5-1、maven打包配置
选择调用顶层Maven目标
目标中填入打包命令:clean install -Dmaven.test.skip=true -Pdev
说明:-Pdev是因为我的项目区分环境,可不加
5-2、执行shell配置(备份)
构建中的 增加构建步骤 -> Execute shell
填入如下脚本:
case $Status in
Deploy)
echo "Status:$Status"
path="${WORKSPACE}/bak/${BUILD_NUMBER}"
if [ -d $path ];
then
echo "The files is aready exists "
else
mkdir -p $path
fi
\cp -f ${WORKSPACE}/target/*.jar $path
echo "Completing"
;;
Rollback)
echo "Status:$Status"
echo "Version:$Version"
cd ${WORKSPACE}/bak/$Version
\cp -f *.jar $path ${WORKSPACE}/target
;;
;;
*)
exit
;;
esac
这样发布后以后,就会备份如下
5-3、定期删除备份脚本
项目备份不可能无限制备份,这样很快就会占满磁盘,所以我们必须有清除老旧备份的机制。此处配置一个脚本,每次发布都执行一次,判断备份数是否超过5个,如果超过,则删除老旧备份,只保留最新的5个。
再添加一个执行shell步骤,填入以下脚本,其中备份数量可以自行修改减小或加大
# 删除历史备份文件
ReservedNum=5 #保留文件数
FileDir=${WORKSPACE}/bak/
date=$(date "+%Y%m%d-%H%M%S")
cd $FileDir #进入备份目录
FileNum=$(ls -l | grep '^d' | wc -l) #当前有几个文件夹,即几个备份
while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt | head -1) #获取最旧的那个备份文件夹
echo $date "Delete File:"$OldFile
rm -rf $FileDir/$OldFile
let "FileNum--"
done
六、构建后操作
七、项目部署服务器脚本
7-1、编写脚本
在服务器192.168.122.4上执行操作如下命令:
mkdir -p /root/Jenkins-in/
cd /root/Jenkins-in/
vi remit-channel.sh
脚本内容如下:
#!/bin/bash
DATE=$(date +%Y%m%d%H%M%S)
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/data/jdk1.8.0_261
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
DIR="/data/P4/p4-remit-channel"
JARFILE="p4-remit-channel-0.0.1-SNAPSHOT.jar"
if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR
ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9
mv -f $JARFILE backup/$JARFILE$DATE
mv -f /root/Jenkins-in/$JARFILE .
java -jar -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m $JARFILE > out.log &
if [ $? = 0 ];then
sleep 30
tail -n 50 out.log
fi
cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
7-2、脚本可执行授权
chmod +x test-job.sh
八、发布
- 回到项目主界面,点击Build with Parameters
- 发布选择Deploy—>开始构建,即可开始发布。
- 回滚选择Rollback—>输入回滚版本---->开始构建,版本号从构建历史中选择一个输入
九、参考
1、使用Jenkins自动部署SpringBoot项目:https://blog.csdn.net/zjh_746140129/article/details/80904876
2、Jenkins版本回滚:https://www.jianshu.com/p/af5fecaa8357