前提:
1.至少两台装有jdk8服务器,其中一台装maven和jenkins;
2.仓库用的gitee;
3.一个springBoot项目(springcloud项目同理)。
步骤:
1.新建jenkins任务
2.配置参数
3.配置git仓库
4.构建选择Execute shell,配置执行脚本。
下面这两个脚本不用改,原样复制粘贴就行
#!/bin/sh -l case $Status in Deploy) pwd mvn clean compile package -Dmaven.test.skip=true #前提是jenkins这台机器上装的有maven,并配置了全局环境变量 echo "Status:$Status" path="${WORKSPACE}/bak/${BUILD_NUMBER}" #创建每次要备份的目录 if [ -d $path ]; then echo "The files is already exists " else mkdir -p $path fi \cp -f ${WORKSPACE}/target/*.jar $path #将打包好的war包备份到相应目录,覆盖已存在的目标 echo "Completing!" ;; Rollback) echo "Status:$Status" echo "Version:$Version" cd ${WORKSPACE}/bak/$Version #进入备份目录 \cp -f *.jar ${WORKSPACE}/target/ #将备份拷贝到程序打包目录中,并覆盖之前的war包 ;; *) exit ;; esac
自动删除多余的备份,只保留最近5次的记录
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
5.这里建议先保存上面的操作,执行一下Deploy,再配置远程服务器(要部署应用的服务器)
#!/bin/sh -l cd /app/test/target ./app.sh stop /app/test/target/springboot_validator-1.0.0-SNAPSHOT.jar springboot_validator ./app.sh start /app/test/target/springboot_validator-1.0.0-SNAPSHOT.jar springboot_validator
至此,保存即可!然后去Deploy就行。
脚本app.sh,放到要部署服务的目录下的target目录里cd /app/test/target,再手动创建个logs目录。
#!/bin/sh -l #spring boot Jar包目录 APP_NAME=$2 LOG_NAME=$3 #PID=$(ps -ef | grep $APP_NAME| grep -v grep | awk '{print $2}') PID=$(jps -l |grep $APP_NAME |awk '{print $1}') #使用说明,用来提示输入参数 usage() { echo "Usage: sh start.sh [start|stop|restart|status] [APP_NAME]" exit 1 } #检查程序是否在运行 is_exist(){ #pid=$(ps -ef | grep $APP_NAME| grep -v grep | awk '{print $2}') #如果不存在返回1,存在返回0 if [ -z "${PID}" ]; then return 1 else return 0 fi } #启动方法 start(){ is_exist if [ $? -eq 0 ]; then echo "${APP_NAME} is already running. pid=${PID}" else #这个dontKillMe 是一定要加的,不然jenkins会杀死这个进程,导致服务退出 BUILD_ID=dontKillMe #将日志输出到out,可以自己命名,下面会输出“2021-10-19 23:17:07_log.out”样式的文件 current_date=`date "+%Y-%m-%d %H:%M:%S"` nohup java -jar ${APP_NAME} >logs/${LOG_NAME}_${current_date}.out 2>&1 & if [ $? -eq 0 ]; then echo "应用${APP_NAME} 启动成功!pid=$(jps -l |grep $APP_NAME |awk '{print $1}')" echo "启动日志输出到:logs/${current_date}_log.out" else echo "${APP_NAME} 启动失败!" fi fi } #停止方法 stop(){ is_exist if [ $? -eq "0" ]; then echo "应用${APP_NAME}停止服务!pid=${PID}!" kill -9 ${PID} else echo "${APP_NAME} is not running" fi } #输出运行状态 status(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is running. Pid is ${PID}" else echo "${APP_NAME} is NOT running." fi } #重启 restart(){ stop sleep 5 start } #根据输入参数,选择执行对应方法,不输入则执行使用说明 case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac