Jenkins 自动部署 spring cloud项目
下载jenkins 最新版本Jenkins 2.277.2 LTS(长期支持) war版本的
可以通过 War Jenkins Packages 寻找想要的版本
使用宝塔的一键部署 运行


或者这里直接使用命令运行启动 因为Jenkins 目前只支持 8 11 所以固定的jdk路径 这里的httpport就是端口号
sudo nohup /usr/local/btjdk/jdk8/bin/java -Dfile.encoding=utf-8 -jar -Xms256m -Xmx1024m /www/wwwroot/jdk17/jenkins.war --httpPort=6312 >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)jenkins.log 2>&1 &
配置jenkins 的账号 密码
Jenkins 安装推荐插件后 建议重启一下
Jenkins重启 http://localhost:8080/restart
在系统管理 插件管理中 搜索 maven node 安装 (centOS 中也需要 yum安装 mvn 宝塔安装PM2管理器以支持node环境)
//安装git
yum -y install git
// 安装maven
yum -y install maven


在全局工具配置中 配置 java 环境 mvn环境 git环境 node 环境


cloud项目选 新建任务maven vue 选构建一个自由风格的软件项目构建vue项目

需要注意4 个地方 第一个是 源码

第二个是构建前的命令 第三个是构建的命令

第四个是 构建完成后的操作

其他功能 按需选择 这里都不选
点击立即构建 后 查看控制台 输出

可以在构建后执行sh 运行服务 即可
这里放上一份我在用的shell命令
#! /bin/bash
#构建项目
#Jenkins build结束后会kill掉衍生进程。 通过此代码可防止被kill
export BUILD_ID=ryklcloud$(date +%Y%m%d%H%M)
#设置jar包路径变量
APP_HOME=/www/wwwroot/kalun/ryjar/app.jar
AUTH_HOME=/www/wwwroot/kalun/ryjar/ruoyi-auth.jar
GATEWAY_HOME=/www/wwwroot/kalun/ryjar/ruoyi-gateway.jar
SYSTEM_HOME=/www/wwwroot/kalun/ryjar/ruoyi-modules-system.jar
FILE_HOME=/www/wwwroot/kalun/ryjar/ruoyi-modules-file.jar
GEN_HOME=/www/wwwroot/kalun/ryjar/ruoyi-modules-gen.jar
JOB_HOME=/www/wwwroot/kalun/ryjar/ruoyi-modules-job.jar
SENTINEL_HOME=/www/wwwroot/kalun/ryjar/sentinel-dashboard-1.8.1.jar
WORKFLOW_HOME=/www/wwwroot/kalun/ryjar/ruoyi-visual-monitor.jar
project_move() {
echo "进入移动项目环节"
rm -rf /www/wwwroot/kalun/ryjar/app.jar
rm -rf /www/wwwroot/kalun/ryjar/ruoyi-auth.jar
rm -rf /www/wwwroot/kalun/ryjar/ruoyi-gateway.jar
rm -rf /www/wwwroot/kalun/ryjar/ruoyi-modules-system.jar
rm -rf /www/wwwroot/kalun/ryjar/ruoyi-modules-file.jar
rm -rf /www/wwwroot/kalun/ryjar/ruoyi-modules-gen.jar
rm -rf /www/wwwroot/kalun/ryjar/ruoyi-modules-job.jar
rm -rf /www/wwwroot/kalun/ryjar/ruoyi-visual-monitor.jar
#移动jar包
cp /root/.jenkins/workspace/ry/app/target/app.jar /www/wwwroot/kalun/ryjar/
cp /root/.jenkins/workspace/ry/ruoyi-auth/target/ruoyi-auth.jar /www/wwwroot/kalun/ryjar/
cp /root/.jenkins/workspace/ry/ruoyi-gateway/target/ruoyi-gateway.jar /www/wwwroot/kalun/ryjar/
cp /root/.jenkins/workspace/ry/ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar /www/wwwroot/kalun/ryjar/
cp /root/.jenkins/workspace/ry/ruoyi-modules/ruoyi-file/target/ruoyi-modules-file.jar /www/wwwroot/kalun/ryjar/
cp /root/.jenkins/workspace/ry/ruoyi-modules/ruoyi-gen/target/ruoyi-modules-gen.jar /www/wwwroot/kalun/ryjar/
cp /root/.jenkins/workspace/ry/ruoyi-modules/ruoyi-job/target/ruoyi-modules-job.jar /www/wwwroot/kalun/ryjar/
cp /root/.jenkins/workspace/ry/ruoyi-visual/ruoyi-monitor/target/ruoyi-visual-monitor.jar /www/wwwroot/kalun/ryjar/
}
process_app() {
app_pid=$(ps -ef | grep $APP_HOME | grep -v grep | awk '{print $2}')
}
process_auth() {
auth_pid=$(ps -ef | grep $AUTH_HOME | grep -v grep | awk '{print $2}')
}
process_gateway() {
gateway_pid=$(ps -ef | grep $GATEWAY_HOME | grep -v grep | awk '{print $2}')
}
process_system() {
system_pid=$(ps -ef | grep $SYSTEM_HOME | grep -v grep | awk '{print $2}')
}
process_file() {
file_pid=$(ps -ef | grep $FILE_HOME | grep -v grep | awk '{print $2}')
}
process_gen() {
gen_pid=$(ps -ef | grep $GEN_HOME | grep -v grep | awk '{print $2}')
}
process_job() {
job_pid=$(ps -ef | grep $JOB_HOME | grep -v grep | awk '{print $2}')
}
process_sentinel() {
sentinel_pid=$(ps -ef | grep $SENTINEL_HOME | grep -v grep | awk '{print $2}')
}
process_workflow() {
workflow_pid=$(ps -ef | grep $WORKFLOW_HOME | grep -v grep | awk '{print $2}')
}
stop_app() {
process_app
echo "this app process PID:$app_pid"
if [ -z "$app_pid" ]; then
echo "$APP_HOME is not running"
else
sudo kill -9 $app_pid
echo "this app process [$app_pid]正在停止"
fi
}
stop_auth() {
process_auth
echo "this auth process PID:$auth_pid"
if [ -z "$auth_pid" ]; then
echo "$AUTH_HOME is not running"
else
sudo kill -9 $auth_pid
echo "this auth process [$auth_pid]正在停止"
fi
}
stop_gateway() {
process_gateway
echo "this gateway process PID:$gateway_pid"
if [ -z "$gateway_pid" ]; then
echo "$GATEWAY_HOME is not running"
else
sudo kill -9 $gateway_pid
echo "this gateway process [$gateway_pid]正在停止"
fi
}
stop_system() {
process_system
echo "this system process PID:$system_pid"
if [ -z "$system_pid" ]; then
echo "$SYSTEM_HOME is not running"
else
sudo kill -9 $system_pid
echo "this system process [$system_pid]正在停止"
fi
}
stop_file() {
process_file
echo "this file process PID:$file_pid"
if [ -z "$file_pid" ]; then
echo "$FILE_HOME is not running"
else
sudo kill -9 $file_pid
echo "this file process [$file_pid]正在停止"
fi
}
stop_gen() {
process_gen
echo "this gen process PID:$file_pid"
if [ -z "$gen_pid" ]; then
echo "$GEN_HOME is not running"
else
sudo kill -9 $gen_pid
echo "this gen process [$gen_pid]正在停止"
fi
}
stop_job() {
process_job
echo "this job process PID:$job_pid"
if [ -z "$job_pid" ]; then
echo "$JOB_HOME is not running"
else
sudo kill -9 $job_pid
echo "this job process [$job_pid]正在停止"
fi
}
stop_workflow() {
process_workflow
echo "this workflow process PID:$workflow_pid"
if [ -z "$workflow_pid" ]; then
echo "$WORKFLOW_HOME is not running"
else
sudo kill -9 $workflow_pid
echo "this workflow process [$workflow_pid]正在停止"
fi
}
#启动所有项目
start_app() {
process_app
echo "this app process PID:$app_pid"
if [ -z "$app_pid" ]; then
echo "The app 服务开始启动"
sudo nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms64m -Xmx128m -Xmn64m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $APP_HOME >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)app.log 2>&1 &
else
echo "$APP_HOME is already running. pid=$app_pid"
fi
}
start_auth() {
process_auth
echo "this auth process PID:$auth_pid"
if [ -z "$auth_pid" ]; then
echo "The auth 服务开始启动"
sudo nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms64m -Xmx128m -Xmn64m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $AUTH_HOME >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)auth.log 2>&1 &
else
echo "$AUTH_HOME is already running. pid=$auth_pid"
fi
}
start_gateway() {
process_gateway
echo "this gateway process PID:$gateway_pid"
if [ -z "$gateway_pid" ]; then
echo "The gateway 服务开始启动"
sudo nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms64m -Xmx128m -Xmn64m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $GATEWAY_HOME >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)gateway.log 2>&1 &
else
echo "$GATEWAY_HOME is already running. pid=$gateway_pid"
fi
}
start_system() {
process_system
echo "this system process PID:$system_pid"
if [ -z "$system_pid" ]; then
echo "The system 服务开始启动"
sudo nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms64m -Xmx128m -Xmn64m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $SYSTEM_HOME >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)system.log 2>&1 &
else
echo "$SYSTEM_HOME is already running. pid=$system_pid"
fi
}
start_file() {
process_file
echo "this file process PID:$file_pid"
if [ -z "$file_pid" ]; then
echo "The file 服务开始启动"
sudo nohup java -jar -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms64m -Xmx128m -Xmn64m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $FILE_HOME >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)file.log 2>&1 &
else
echo "$FILE_HOME is already running. pid=$file_pid"
fi
}
start_gen() {
process_gen
echo "this gen process PID:$gen_pid"
if [ -z "$gen_pid" ]; then
echo "The gen 服务开始启动"
sudo nohup java -jar -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms64m -Xmx128m -Xmn64m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $GEN_HOME >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)gen.log 2>&1 &
else
echo "$GEN_HOME is already running. pid=$gen_pid"
fi
}
start_job() {
process_job
echo "this job process PID:$job_pid"
if [ -z "$job_pid" ]; then
echo "The job 服务开始启动"
sudo nohup java -jar -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms64m -Xmx128m -Xmn64m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $JOB_HOME >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)job.log 2>&1 &
else
echo "$JOB_HOME is already running. pid=$job_pid"
fi
}
# 启动流量控制框架
start_sentinel() {
process_sentinel
echo "this sentinel process PID:$sentinel_pid"
if [ -z "$sentinel_pid" ]; then
echo "The sentinel 服务开始启动"
sudo nohup java -Dproject.name=sentinel -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=192.168.241.129:8718 -jar -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms64m -Xmx128m -Xmn64m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $SENTINEL_HOME >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)sentinel.log 2>&1 &
else
echo "$SENTINEL_HOME is already running. pid=$sentinel_pid"
sudo kill -9 $sentinel_pid
echo "this sentinel process [$sentinel_pid]正在停止"
fi
}
# 监控中心
start_workflow() {
process_workflow
echo "this $WORKFLOW_HOME workflow process PID:$workflow_pid"
if [ -z "$workflow_pid" ]; then
echo "The workflow 服务开始启动"
sudo nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms64m -Xmx256m -Xmn128m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $WORKFLOW_HOME >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)workflow.log 2>&1 &
else
echo "$WORKFLOW_HOME is already running. pid=$workflow_pid"
fi
}
stop() {
echo "停止项目开始"
stop_app
stop_auth
stop_gateway
stop_system
stop_file
stop_job
stop_gen
stop_workflow
}
start() {
echo "进入启动项目环节"
#这里的休眠是考虑到cpu负载过高的问题
start_auth
sleep 6
start_gateway
sleep 6
start_system
sleep 6
start_app
sleep 6
start_file
sleep 6
start_job
sleep 6
start_workflow
# 服务器不需要生成代码
# start_gen
}
status() {
process_app
if [ -z "$app_pid" ]; then
echo "$APP_HOME is not running"
else
echo "$APP_HOME is running"
fi
process_auth
if [ -z "$auth_pid" ]; then
echo "$AUTH_HOME is not running"
else
echo "$AUTH_HOME is running"
fi
process_gateway
if [ -z "$gateway_pid" ]; then
echo "$GATEWAY_HOME is not running"
else
echo "$GATEWAY_HOME is running"
fi
process_system
if [ -z "$system_pid" ]; then
echo "$SYSTEM_HOME is not running"
else
echo "$SYSTEM_HOME is running"
fi
process_file
if [ -z "$file_pid" ]; then
echo "$FILE_HOME is not running"
else
echo "$FILE_HOME is running"
fi
process_gen
if [ -z "$gen_pid" ]; then
echo "$GEN_HOME is not running"
else
echo "$GEN_HOME is running"
fi
process_job
if [ -z "$job_pid" ]; then
echo "$JOB_HOME is not running"
else
echo "$JOB_HOME is running"
fi
process_workflow
if [ -z "$workflow_pid" ]; then
echo "$WORKFLOW_HOME is not running"
else
echo "$WORKFLOW_HOME is running"
fi
}
#启动网云穿 内网穿透
start_wyc_linux_64() {
nohup /www/wwwroot/kalun/wyc_linux_64 -token=mmldrety >>/www/wwwroot/kalun/ryjar/rylog/$(date +%Y%m%d%H%M)wyc_linux_64.log 2>&1 &
}
#脚本菜单项
usage() {
echo "Usage: sh 脚本名.sh [start|start_sentinel|project_move|stop|status]"
exit 1
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"start_sentinel")
start_sentinel
;;
"project_move")
project_move
;;
"stop")
stop
;;
"status")
status
;;
*)
usage
;;
esac
vue项目 新建时选自由风格的项目
需要注意这一步 防止出现npm等命令不存在 的异常

//这是vue的脚本
#! /bin/bash
#构建项目
#设置jar包路径变量
UI_HOME=/www/wwwroot/kalun/dist
VUEJS_HOME=/root/.jenkins/workspace/ryui
dev() {
cd $VUEJS_HOME
npm install
npm run build:dev -- --dest="$UI_HOME"
}
stage() {
cd $VUEJS_HOME
npm install
npm run build:stage -- --dest="$UI_HOME"
}
prod() {
cd $VUEJS_HOME
npm install
npm run build:prod -- --dest="$UI_HOME"
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"dev")
dev
;;
"stage")
stage
;;
"prod")
prod
;;
esac
这里可以配置下 缓存策略

定时构建策略 这里是每天1点 可能时区有点问题

补上最终效果图


本文介绍了如何安装配置Jenkins以实现Spring Cloud项目的自动部署。首先下载Jenkins LTS版本并启动,然后配置Jenkins账号和密码,安装必要的插件如Maven和Node.js。接着,在全局工具配置中设置Java、Maven、Git和Node.js环境。创建Maven和Vue项目,分别配置源码管理、构建触发器和构建步骤。最后,设置定时构建策略并查看构建结果。
1710

被折叠的 条评论
为什么被折叠?



