无Git代码托管下,3套JAR一键部署Jenkins方案(适配内网离线开发)
·
一、业务背景与通用架构
1.1 现状痛点
许多企业内网开发、外包小项目或自研内部系统,完全不使用Git/Gitee/SVN等代码仓库:
- 代码仅本地开发,不做版本托管;
- 传统Jenkins「拉取代码 → 服务内打包 → 远程部署」流程无法适用。
现有固定架构:
- 开发端:IDEA / Cursor 本地编码,本地Maven打包生成JAR;
- 服务端1:Jenkins(仅作中转、远程下发部署,不编译代码);
- 服务端2:远端业务服务器(最终运行Spring Boot JAR)。
1.2 统一核心部署链路(三套方案共用)
本地IDE打包JAR → 上传JAR至Jenkins任务工作区 → 触发Jenkins构建(Build Now)
→ Jenkins通过SSH推送JAR至业务服务器 → 停止旧进程 → 启动新JAR
1.3 通用前置配置(三套方案仅需配置一次)
- 安装插件:
Publish Over SSH(远程传包+执行脚本)。 - 系统配置:录入远端业务服务器SSH账号密码,连通性测试成功。
- 新建纯部署任务:
- 删除Git源码管理,删除Maven打包步骤;
- Jenkins仅负责部署,不重新打包覆盖本地JAR。
- 开启远程构建:配置触发Token,关闭CSRF跨站校验(内网环境安全)。
- 生成API Token:用于文件上传和接口调用的鉴权。
- 配置通用启停脚本(Jenkins后置SSH脚本):
# 停止旧Java进程 PID=$(ps -ef | grep 'java -jar /opt/app/*.jar' | grep -v grep | awk '{print $2}') if [ -n "$PID" ]; then kill -9 $PID; fi # 后台启动新JAR nohup java -jar /opt/app/*.jar --spring.profiles.active=prod > /opt/app/app.log 2>&1 & sleep 3 # 健康自检 curl http://127.0.0.1:8080/actuator/health
二、方案一:自研IDEA插件(团队长期最优)
适用场景:团队固定使用IDEA、高频发布、多环境(测试/生产)切换,需要可视化一键操作,拒绝命令行。
实现原理
基于IntelliJ Platform SDK开发轻量化插件,内置配置面板,封装三大能力:
- 调用IDEA内置Maven进行本地打包;
- HTTP鉴权上传JAR至Jenkins任务工作区;
- 调用Jenkins远程构建API(等价于手动点击“Build Now”),并同步监听部署结果。
核心特性
- 可视化配置:Jenkins地址、账号、Token、任务名、环境信息本地持久化存储。
- 右键/工具栏快捷发布:项目右键一键发布,或点击工具栏按钮。
- 结果反馈:IDE弹窗提示成功/失败,并可跳转Jenkins控制台日志。
- 防覆盖逻辑:适配空部署任务,不会重新打包覆盖本地JAR。
优缺点
- ✅ 集成度最高、零命令、上手最简单、多模块/多环境隔离完善。
- ❌ 首次有开发成本(需编写插件并分发)。
三、方案二:IDEA External Tool(零开发,免费即用)
适用场景:单人开发、单环境、快速落地,不想编写插件代码。
配置步骤(Windows/Mac通用)
- 菜单:
File → Settings → Tools → External Tools,点击“+”新增工具。 - 填写参数:
- Name:
一键Jar部署Jenkins - Program:
sh - Arguments:
$ProjectFileDir$/deploy-jenkins.sh - Working directory:
$ProjectFileDir$
- Name:
- 项目根目录新建
deploy-jenkins.sh,粘贴以下脚本:
#!/bin/bash
# ========== 使用者仅修改以下配置 ==========
JENKINS_HOST="http://192.168.1.100:8080"
JENKINS_USER="admin"
JENKINS_TOKEN="你的API令牌"
JOB_NAME="jar-deploy-empty"
BUILD_TOKEN="deploy666"
# ========================================
# 1. 本地Maven打包
mvn clean package -DskipTests
JAR_FILE=$(find target -maxdepth 1 -name "*.jar" | head -n1)
if [ -z "$JAR_FILE" ]; then
echo "打包失败,未找到JAR包!"
exit 1
fi
# 2. 上传JAR到Jenkins工作目录
curl -X POST -u ${JENKINS_USER}:${JENKINS_TOKEN} \
-F "file=@${JAR_FILE}" \
${JENKINS_HOST}/job/${JOB_NAME}/ws/upload.jar
# 3. 触发Jenkins构建
curl -u ${JENKINS_USER}:${JENKINS_TOKEN} \
${JENKINS_HOST}/job/${JOB_NAME}/build?token=${BUILD_TOKEN}
echo "✅ 打包上传完成,Jenkins将自动下发至业务服务器"
使用方式:项目右键 → External Tools → 点击“一键Jar部署Jenkins”。
优缺点
- ✅ 零开发、原生支持、配置一次永久使用,无兼容性问题。
- ❌ 换电脑需重新配置;多环境切换需手动修改脚本参数。
四、方案三:Cursor Skill(云端保存,跨设备复用)
适用场景:使用Cursor编辑器、多设备办公、需云端同步脚本,支持多环境入参切换。
创建步骤
- Cursor左侧边栏 →
Skills→Create New Skill。 - 类型选择
Shell Script,命名如“内网JAR一键部署Jenkins”。 - 粘贴以下脚本(支持传入
test/prod参数):
#!/bin/bash
# Cursor Skill:一键部署,支持环境切换
ENV=$1
# 环境配置
if [ "$ENV" = "test" ]; then
JENKINS_HOST="http://192.168.1.100:8080"
JOB_NAME="test-jar-deploy"
else
JENKINS_HOST="http://192.168.1.200:8080"
JOB_NAME="prod-jar-deploy"
fi
# 公共鉴权
JENKINS_USER="admin"
JENKINS_API_TOKEN="你的API令牌"
BUILD_TRIGGER_TOKEN="deploy888"
echo "===== 开始本地Maven打包 ====="
mvn clean package -DskipTests
JAR_FILE=$(find target -name "*.jar" | head -n1)
[ -z "$JAR_FILE" ] && echo "JAR不存在,打包终止" && exit 1
echo "===== 上传JAR至Jenkins ====="
curl -s -X POST -u ${JENKINS_USER}:${JENKINS_API_TOKEN} \
-F "file=@${JAR_FILE}" \
${JENKINS_HOST}/job/${JOB_NAME}/ws/upload.jar
echo "===== 触发远程构建 ====="
curl -s ${JENKINS_HOST}/job/${JOB_NAME}/build?token=${BUILD_TRIGGER_TOKEN}
# 轮询部署结果
sleep 4
BUILD_RESULT=$(curl -s -u ${JENKINS_USER}:${JENKINS_API_TOKEN} \
${JENKINS_HOST}/job/${JOB_NAME}/lastBuild/api/json | jq -r '.result')
if [ "$BUILD_RESULT" = "SUCCESS" ]; then
echo "🎉 远端服务部署启动成功"
else
echo "❌ 部署失败,请查看Jenkins控制台日志"
fi
使用方式:打开项目 → 选中Skill → 输入环境参数(test/prod)→ 点击运行。
优缺点
- ✅ 脚本云端存储,跨设备无需重配;支持参数切换环境;内置终端,无需额外配置IDE工具。
- ❌ 必须使用Cursor编辑器,团队需统一编辑器。
五、方案横向对比(选型速览)
| 方案 | 开发成本 | 跨设备复用 | 多环境适配 | 适用场景 |
|---|---|---|---|---|
| 自研IDEA插件 | 高 | 支持(分发) | 极佳(可视化切换) | 团队长期迭代,IDEA统一 |
| IDEA External Tool | 零 | 需手动导出配置 | 一般(改脚本) | 单人开发,固定单环境 |
| Cursor Skill | 零 | 云端自动同步 | 优秀(入参切换) | 团队统一Cursor,多环境频繁发布 |
六、核心避坑要点(三套方案通用)
- Jenkins任务禁止包含Maven打包步骤:否则Build Now会重新编译,覆盖本地已打好的JAR。
- 内网环境建议关闭CSRF:否则接口调用和文件上传会返回403错误。
- 远端业务服务器目录需预先创建:如
/opt/app,须与SSH脚本中的目录一致。 - Jenkins API Token权限最小化:只开放文件上传和构建权限,避免使用管理员账号。
- Windows需安装
jq命令:否则无法解析Jenkins的JSON返回结果(方案三依赖)。
七、整体统一时序图(三套方案执行链路完全一致)
三套方案仅IDE执行载体不同,后端调用链路与Jenkins执行逻辑完全一致,通用时序如下:
流程说明:
- 开发端通过插件/外部工具/Skill触发部署,本质均为调用本地Maven打包,再通过HTTP接口与Jenkins交互。
- Jenkins收到构建请求后,利用
Publish Over SSH插件将JAR推送至远端服务器,并执行预定义的启停脚本。 - 部署结果可通过Jenkins的API查询(如方案三中的轮询),或由插件直接解析构建日志反馈给开发者。
更多推荐




所有评论(0)