企业级后端部署方案Jenkins MinIO SSH Gitee Jenkinsfile 自动化实践本文档基于jenkinsfileTest/backend.jenkinsfile及共享库jenkinslib编写描述 Java 后端从 Maven/Gradle 编译、JAR 制品入库含保留策略、多机 SSH 部署启动脚本模板/自定义、指定启动用户到回滚的完整流程。一、方案架构1.1 组件说明组件角色说明Gitee代码仓库SSH 拉取指定分支Jenkins (master)CI/CD编译、上传 MinIO、SSH 部署、launch.sh 重启MinIO制品仓库版本化 JAR自动清理超额历史包应用服务器运行节点SSH 拉 JAR bin/launch.sh restartApollo配置中心脚本模板模式注入 JVM 参数1.2 目标机目录结构{destPath}/ ├── order-service-20250618_143022-a1b2c3d.jar # 当前 JAR保留 N 个历史 JAR └── bin/ └── launch.sh # start / stop / restart1.3 流水线与共享库文件说明backend.jenkinsfile后端流水线入口pipeline.groovycheckout、发布门禁、回滚选版build.groovycompile()mvn/gradledeploy.groovyMinIO 上传/清理、SSH 部署、launch 脚本生成resources/backend-launch-template.sh默认 bash 启动脚本tools.groovypublishMode、startScriptType 归一化config.groovy凭据、MinIO、默认保留数二、发布模式publishModepublishMode行为自动发布默认构建上传后自动部署手动发布input 确认后部署仅构建仅上传 MinIO不 SSH 部署回滚选历史 JAR 部署回滚其他自动/手动仅构建publishMode选 JAR 版本 SSH 部署CheckOut → 编译 → 上传 MinIOpublishMode发布launch.sh restart跳过发布post 邮件三、时序图自动发布应用服务器MinIOdeploy.groovyJenkins应用服务器MinIOdeploy.groovyJenkinscompile(mvn/gradle) → 查找 JAR1uploadToMinio prune保留 N 个2deployBackendJar3buildLaunchScript模板或自定义4SSH 下载 JAR5清理超额旧 JAR服务器本地6写入 bin/launch.sh7sudo -u runUser launch.sh restart8四、启动脚本4.1 脚本模板模式startScriptType脚本模板共享库backend-launch-template.sh支持start/stop/restart。停服逻辑已修复按应用目录${app_dir}匹配 Java 进程而非按带时间戳的 JAR 文件名避免换 JAR 后旧进程停不掉。find_pid(){ps-ef|grepjava|grep${app_dir}/|grep-vgrep|awk{print $2}|head-1}占位符{{PRONAME}}{{JARNAME}}{{JVM_OPTS}}{{APOLLO_*}}4.2 自定义脚本模式上传launchScriptFile或填写customScriptContent至少一种同样支持占位符替换4.3 启动用户runUserchown-R${runUser}${destPath}sudo-u${runUser}bashbin/launch.sh restart五、Jenkins 配置5.1 参数化构建基础参数参数名类型说明TenvChoicedev/test/prodpublishModeChoice必配自动发布/手动发布/仅构建/回滚projectNameString应用名JAR 命名与 MinIO 路径buildTypeChoicemvn / gradlebuildshellString如 clean package -DskipTestsbuildPathStringJAR 搜索目录默认 targetdestPathString目标机应用根目录destIpString部署服务器逗号分隔artifactRetainCountStringMinIO 目标机保留 JAR 数默认 10waitMins/emailUserString手动超时 / 邮件发布配置参数名说明runUser启动用户默认 appstartScriptType脚本模板 / 自定义脚本customScriptContent自定义脚本文本launchScriptFileFile Parameter 上传脚本JVM / Apollo模板模式参数名默认值JVM_OPTS-server -Xmx1024m …APOLLO_ENVPROAPOLLO_METAhttp://apollo-eurka-service/APOLLO_NAMESPACESbigdata.configuration,application,…5.2 制品保留策略位置机制MinIOuploadToMinio后pruneMinioArtifacts保留最新 N 个 JAR应用服务器部署时删除{destPath}/{projectName}-*.jar超额旧文件N 由artifactRetainCount控制默认 10见config.DEFAULT_ARTIFACT_RETAIN_COUNT。5.3 凭据与环境变量同前端文档gitee_registry_ssh、minio-credentials、SSH 凭据可选MINIO_ENDPOINT、MINIO_BUCKET默认 backend-artifacts、SSH_KEY_CREDENTIAL_ID。六、流水线阶段阶段条件说明CheckOut≠ 回滚pipeline.checkoutCode代码编译同上build.compilefind JAR命名{projectName}-{BUILD_TIME}-{GIT_COMMIT}.jar打包并上传 MinIO同上cp uploadToMinio prune发布auto/manualrunPublish → deployBackendJar回滚rollbackselectRollbackVersion → deployBackendJarpostalwayssendPost 合并邮件七、共享库 APIdeploy.groovy方法说明uploadToMinio(..., retainCount)上传 JAR 并清理 MinIOdeployBackendJar(...)SSH 部署 launch.sh 本地 JAR 清理resolveCustomScriptFile(script)解析上传的脚本文件buildLaunchScript内部模板/自定义 占位符tools.groovynormalizePublishMode()— 发布模式normalizeStartScriptType()— 脚本模板/自定义parseRetainCount()— 解析保留个数八、典型场景场景publishMode备注日常 Apollo 发版自动发布startScriptType脚本模板构建不上线仅构建制品仍上传 MinIO自定义启动脚本自动发布上传 launchScriptFile回滚回滚使用当前 runUser/脚本配置生成 launch.sh磁盘控制任意artifactRetainCount5九、排错现象处理未找到 JAR检查 buildPath、buildshell双实例/端口占用确认 launch.sh 已更新find_pid 按 app_dir自定义脚本报错提供 launchScriptFile 或 customScriptContent回滚版本少retain 过小导致 MinIO 旧包被删调大保留数sudo 失败配置 sudoers 或 SSH 用户runUser十、快速检查清单共享库含 backend-launch-template.sh目标机已创建 runUsersudo 权限正确publishMode、artifactRetainCount 已配置projectName 与 MinIO 路径一致Apollo 地址在目标机可达模板模式
企业数字化 ERP 产品动态
相关推荐
高级Python技巧:提升开发效率的10个实用方法 在快速发展的软件开发领域,掌握高级Python技巧不仅能显著提升编码效率,还能让代码更优雅、可维护性更强。以下是10个实用方法,帮助你在日常开发中游刃有余。1. 使用 collections 模块的高级数据结构Python的 collections 模块提供了许多比内置… · 2026/9/26 16:30:55
AAFF论坛精粹|光影与新生:赵非、卞灼跨越代际的影像哲思 亚洲艺术电影节AAFF在2026亚洲艺术电影节的主题论坛“光影与新生”现场,澳门科技大学电影学院的罗乐老师担任主持,与中国首位掌镜伍迪艾伦的金鸡、金马双料最佳摄影得主赵非,以及凭借《翠湖》斩获亚洲艺术电影节乡土纪事单元最佳故事片奖的青… · 2026/9/25 10:51:48
XUnity.AutoTranslator:打破语言壁垒,畅玩全球Unity游戏的终极方案 XUnity.AutoTranslator:打破语言壁垒,畅玩全球Unity游戏的终极方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator
还在为看不懂的外语游戏而苦恼吗?想体验日本、韩国、… · 2026/9/25 3:45:25
UART详解:异步串行通信的基石 文章目录1. 物理连接2. 帧格式2.1 起始位2.2 数据位2.3 奇偶校验位2.4 停止位2.5 关键规则:3. 波特率与采样4. 流控5. 错误检测6. 优缺点7. 常见应用8. 与 SPI、I2C 的简单对比UART 是 Universal Asynchronous Receiver/Transmitter 的缩写,中文常叫“通… · 2026/9/26 16:30:49
Token经济学实战:用TaoToken统一Key拆解成本、效率与价值最大化 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:30:43
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46