Files
geg-gas-doc/fully-open-user-manual/index_with_tree.html
2025-10-10 11:35:02 +08:00

57 lines
361 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>文档</title>
<link href="./css/semantic/semantic.min.css" rel="stylesheet">
<link href="./css/oscTree.css" rel="stylesheet">
<link href="./css/markdown.css" rel="stylesheet">
<link href="./css/index.css" rel="stylesheet">
</head>
<body>
<div class="ui container">
<div id="project-title">
<div class="title-wrap">
<div class="left">
<i class="icon eye"></i>
文档预览:
<span id="preview-title"></span>
</div>
<div class="right">
Export by Gitee
</div>
</div>
</div>
<div class="ui container" id="wiki-preview-container">
<div id="wiki-preview">
<div class="ui segment">
<div class="ui grid page">
<div class="three wide column doc-list">
<div class="title">
<a id="ex-all">
收缩全部章节
</a>
</div>
<div class="ztree" id="tree"></div>
</div>
<div class="thirteen wide column doc-content">
<div id="page-detail">
<div class="title">
</div>
<div class="content markdown-body">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
<script src="./js/jquery.min.js"></script>
<script src="./js/ztree.all.js"></script>
<script src="./js/jquery.ztree.exhide.min.js"></script>
<script>
var zTreeObj;var expandStatus=true;$(document).ready(function(){var setting={view:{showLine:true,showIcon:true},callback:{onClick:function(e,treeId,treeNode){if(treeNode!==null&&!treeNode.isParent&&typeof(treeNode.children)==="undefined"){var sort_id=treeNode.sort_id;var content=json_data.content;for(var c in content){if(c==sort_id){$("#page-detail .title").html(treeNode.name);$("#page-detail .content").html(content[c]);return false}}}else{zTreeObj.expandNode(treeNode)}}},data:{simpleData:{enable:true}}};zTreeObj=$.fn.zTree.init($("#tree"),setting,json_data.title);var first_content=json_data.title[0];$("#page-detail .title").html(first_content.name);$("#page-detail .content").html(json_data.content[first_content.sort_id]);$("#preview-title").html(json_data.preview_title);$("#ex-all").on("click",function(e){zTreeObj.expandAll(!expandStatus);expandStatus=!expandStatus;if(expandStatus){$(this).text("收缩全部章节")}else{$(this).text("展开全部章节")}})});
</script><script>var json_data = {"preview_title":"全开使用手册","title":[{"id":"0000000000001. 前言","pId":0,"name":"1. 前言","parent":null,"order":0,"sort_id":13822801,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch2\u003E\n\u003Ca id=\"11-文档修订记录\" class=\"anchor\" href=\"#11-%E6%96%87%E6%A1%A3%E4%BF%AE%E8%AE%A2%E8%AE%B0%E5%BD%95\"\u003E\u003C/a\u003E1.1 文档修订记录\u003C/h2\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E修订次数\u003C/th\u003E\n\u003Cth\u003E文档版本号\u003C/th\u003E\n\u003Cth\u003E修订时间\u003C/th\u003E\n\u003Cth\u003E修订人\u003C/th\u003E\n\u003Cth\u003E修订内容\u003C/th\u003E\n\u003Cth\u003E审核人\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E1\u003C/td\u003E\n\u003Ctd\u003EV1.0\u003C/td\u003E\n\u003Ctd\u003E2025.4\u003C/td\u003E\n\u003Ctd\u003E姚煜楠\u003C/td\u003E\n\u003Ctd\u003E初始版本内容编写。\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Ch2\u003E\n\u003Ca id=\"12-框架概述\" class=\"anchor\" href=\"#12-%E6%A1%86%E6%9E%B6%E6%A6%82%E8%BF%B0\"\u003E\u003C/a\u003E1.2 框架概述\u003C/h2\u003E\n\u003Cp\u003E全代码开发平台是集团技术中台的重要组成部分在主流JAVA技术开发基础上整合了优质的第三方开源项目并基于集团常见业务场景进行适配优化最终研制而成的快速应用开发平台。其定位为通用代码开发脚手架为快速开发上线低代码开发平台无法满足的定制化系统进行赋能。全开平台提供了一个开箱即用的开发环境包含了集团完整的技术生态和技术规范以统一应用开发的技术路线让系统开发者基于技术底座专注于业务实现。平台内置多个应用开发所必须的公共组件各组件以服务或依赖包的方式引入项目包括项目脚手架工程、用户登录组件、权限控制组件、用户管理组件、ORM组件、代码生成器组件、附件上传组件、流程组件等。\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"121-技术栈\" class=\"anchor\" href=\"#121-%E6%8A%80%E6%9C%AF%E6%A0%88\"\u003E\u003C/a\u003E1.2.1 技术栈\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cstrong\u003EJDK版本\u003C/strong\u003E: 8以上\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E基础框架\u003C/strong\u003E: Spring Boot 2.7.5、Spring Cloud\u0026amp;Alibaba 2021.0.5\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E前端框架\u003C/strong\u003E: Vue 3.3.4、Ant-Design-Vue 3.0\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E持久层\u003C/strong\u003E: MyBatis-Plus 3.5.2、Druid 1.2.22\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E权限框架\u003C/strong\u003E: Sa-Token 1.29.0\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E数据库\u003C/strong\u003E: 支持人大金仓默认、MySQL、Oracle、PostgreSQL等\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E缓存\u003C/strong\u003E: Redis\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E文档\u003C/strong\u003E: Knife4j 2.0.7\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E工具库\u003C/strong\u003E: Hutool 5.8.20\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"122-主要特性\" class=\"anchor\" href=\"#122-%E4%B8%BB%E8%A6%81%E7%89%B9%E6%80%A7\"\u003E\u003C/a\u003E1.2.2 主要特性\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E前后端分离架构\u003C/strong\u003E前端基于最新的Vue3 + Ant Design Vue后端基于 Spring Boot前后端核心技术均为主流技术。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E开箱即用\u003C/strong\u003E无需进行复杂的二次集成。平台具备自动生成代码、接口管理、基于 RBAC 改进模型权限控制、数据大屏、Camunda 工作流、打印模板、在线接口、Xss 防跨站攻击等功能并集成了集团组织架构同步、短信邮件平台、待办推送、CAS单点登录等功能。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E在线自定义接口设计\u003C/strong\u003E用户只需要针对业务数据进行处理即可在线生成接口后端无需重新编译实现“接口热插拔”可供内外部进行调用具备高扩展性、高移植性、高兼容性等特点。同时平台提供大量接口相关功能并提供大量接口示例方便用户进行接口使用及系统集成。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E统一授权、认证\u003C/strong\u003E平台使用“Sa-Token”实现统一安全认证中心并支持与集团统一认证的CAS单点登录、与EIP门户和移动办公对接的互信机制。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E灵活的权限控制\u003C/strong\u003E平台的权限控制基于RBAC改进模型可通过组织架构信息针对“功能”、“接口”、“数据”进行精细化管理满足用户实施面向企业安全策略的需要。同时平台已实现集团三级管控模式的数据权限机制方便实现平台单位对下属单位的数据管控需求。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E移动端支持\u003C/strong\u003E平台支持以H5的方式集成到移动办公中。同时根据需求的不同平台提供了数据展示页设计和功能页设计两种移动端界面生成方式生成基础的移动端页面集成了移动端业务的增删查改和流程审批功能。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E代码生成器\u003C/strong\u003E平台基于“Mybatis-plus-generator”提供代码生成器功能用户可通过可视化配置生成“Web 端”、“移动端”、“后端”代码,然后根据自身业务需要进行代码调整。生成的代码提供了基本的增删查改功能和流程审批集成,极大提高了代码开发效率。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E零代码开发\u003C/strong\u003E平台提供自定义表单功能根据平台提供的“组件池”用户通过简单的拖拽及配置则可以完成功能的设计和发布设计完成的功能无需生成代码直接嵌入系统实现功能“热插拔”。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E工作流引擎\u003C/strong\u003E平台集成了符合BPMN设计规范的轻量级工作流引擎“Camunda”功能更强大架构更稳定。同时针对中国式工作流进行了深度的二次研发提供了“表单发起流程”、“电子签章”、“流程委托”、“流程版本变更”、“流程传阅”等符合中国国情的工作流功能并且重新设计了流程模板绘制页面用户只需进行简单的拖拉拽和配置即可完成复杂的流程设计。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003EBI设计\u003C/strong\u003E平台除了支持帆软大屏的集成还提供了一个简单的BI引擎桌面设计集成了百度 Echarts、地图等插件内置了表格、统计指标等用户常用组件用户可以通过0代码的方式设计并实现BI大屏页面同时发布成菜单供系统用户进行查看平台管理员可以通过功能授权对用户进行权限控制。针对复杂的大屏驾驶舱需求平台集成了goView组件提供了更加强大和丰富的BI大屏设计组件并支持vue代码级的修改。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E报表功能\u003C/strong\u003E除了支持帆软报表的集成平台提供UReport报表开发和vue-plugin-hiprint打印组件基于单元格迭代方式可快速开发出各种类型复杂中式报表同时可通过图形化配置实现“标准化”、“动态化”的打印模板通过将模板中的相关组件绑定接口数据可以实现传入不同数据显示不同的报表结果最终完成“报表套打”、“格式规范”、“需要跟业务数据进行关联”的报表开发打印。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E多租户数据隔离\u003C/strong\u003E平台通过mybatis的tenant机制实现“字段级别”的数据隔离即保证数据隔离的安全也可实现跨租户的数据交流。管理员可以在平台的“租户管理”中进行租户授权和功能授权租户之间共用组织架构、功能代码但存在数据隔离。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E信创数据库支持\u003C/strong\u003E平台可支持“人大金仓”、“达梦”、“高斯”等国产数据库也兼容“MySQL”、“Oracle”、“PostgreSQL“等。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E文件存储\u003C/strong\u003E集成minio文件存储管理组件和kkFileView文件预览组件。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E定时任务\u003C/strong\u003E集成power-job定时任务可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E消息服务\u003C/strong\u003E集成了集团的短信和邮件服务。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E安全功能\u003C/strong\u003E完善的xss防御、sql注入防御、黑白名单、接口限流、接口鉴权等。\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch2\u003E\n\u003Ca id=\"13-快速上手\" class=\"anchor\" href=\"#13-%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B\"\u003E\u003C/a\u003E1.3 快速上手\u003C/h2\u003E\n\u003Col\u003E\n\u003Cli\u003E阅读《快速开发指南》明白整体开发流程\u003C/li\u003E\n\u003Cli\u003E拉取空项目代码修改数据库/redis等配置启动项目程序\u003C/li\u003E\n\u003Cli\u003E按照对应的前端/后端/移动端/大屏开发指南完成业务需求开发\u003C/li\u003E\n\u003Cli\u003E查阅《常见业务场景开发示例》快速完成常见业务需求的开发\u003C/li\u003E\n\u003Cli\u003E查阅《外部组件集成》与其他系统或服务进行对接集成\u003C/li\u003E\n\u003Cli\u003E按照《部署指南》完成项目部署和上线\u003C/li\u003E\n\u003Cli\u003E查阅《常见问题》快速定位常见问题原因和解决办法\u003C/li\u003E\n\u003Cli\u003E查阅《核心功能设计和使用》了解框架底层设计思路排查难度大的问题\u003C/li\u003E\n\u003Cli\u003E查阅《更新日志》获取框架升级信息\u003C/li\u003E\n\u003C/ol\u003E"},{"id":"0000000000002. 快速开发指南","pId":0,"name":"2. 快速开发指南","parent":null,"order":1,"sort_id":13882309,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch3\u003E\n\u003Ca id=\"21-环境要求\" class=\"anchor\" href=\"#21-%E7%8E%AF%E5%A2%83%E8%A6%81%E6%B1%82\"\u003E\u003C/a\u003E2.1 环境要求\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EJDK 8+\u003C/li\u003E\n\u003Cli\u003EMaven 3.6+\u003C/li\u003E\n\u003Cli\u003EMySQL 5.7+\u003C/li\u003E\n\u003Cli\u003ERedis 5.0+\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"22-项目配置\" class=\"anchor\" href=\"#22-%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E2.2 项目配置\u003C/h3\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"yaml\" class=\"yaml\"\u003E\u003Ccode\u003E# application.yml\nserver:\n port: 8080\n\nspring:\n datasource:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/xjrsoft?useUnicode=true\u0026amp;characterEncoding=utf8\u0026amp;serverTimezone=Asia/Shanghai\n username: root\n password: root\n \n redis:\n host: localhost\n port: 6379\n database: 0\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Ch3\u003E\n\u003Ca id=\"23-启动项目\" class=\"anchor\" href=\"#23-%E5%90%AF%E5%8A%A8%E9%A1%B9%E7%9B%AE\"\u003E\u003C/a\u003E2.3 启动项目\u003C/h3\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"bash\" class=\"bash\"\u003E\u003Ccode\u003Emvn spring-boot:run\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E"},{"id":"0000000000003. 核心功能使用","pId":0,"name":"3. 核心功能使用","parent":null,"order":2,"sort_id":13882320,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch3\u003E\n\u003Ca id=\"31-权限管理\" class=\"anchor\" href=\"#31-%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86\"\u003E\u003C/a\u003E3.1 权限管理\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E基于Sa-Token的权限控制\u003C/li\u003E\n\u003Cli\u003E支持多角色\u003C/li\u003E\n\u003Cli\u003E支持数据权限\u003C/li\u003E\n\u003Cli\u003E支持接口权限\u003C/li\u003E\n\u003Cli\u003E支持菜单权限\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"32-数据访问\" class=\"anchor\" href=\"#32-%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE\"\u003E\u003C/a\u003E3.2 数据访问\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EMyBatis-Plus增强\u003C/li\u003E\n\u003Cli\u003E多数据源支持\u003C/li\u003E\n\u003Cli\u003E动态SQL\u003C/li\u003E\n\u003Cli\u003E分页查询\u003C/li\u003E\n\u003Cli\u003E逻辑删除\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"33-代码生成\" class=\"anchor\" href=\"#33-%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90\"\u003E\u003C/a\u003E3.3 代码生成\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E支持多种数据库\u003C/li\u003E\n\u003Cli\u003E自定义模板\u003C/li\u003E\n\u003Cli\u003E前后端代码生成\u003C/li\u003E\n\u003Cli\u003E表单配置生成\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"34-工作流\" class=\"anchor\" href=\"#34-%E5%B7%A5%E4%BD%9C%E6%B5%81\"\u003E\u003C/a\u003E3.4 工作流\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E基于Camunda的工作流引擎\u003C/li\u003E\n\u003Cli\u003E流程设计器\u003C/li\u003E\n\u003Cli\u003E流程部署\u003C/li\u003E\n\u003Cli\u003E任务管理\u003C/li\u003E\n\u003Cli\u003E流程监控\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"35-报表功能\" class=\"anchor\" href=\"#35-%E6%8A%A5%E8%A1%A8%E5%8A%9F%E8%83%BD\"\u003E\u003C/a\u003E3.5 报表功能\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E基于UReport的报表系统\u003C/li\u003E\n\u003Cli\u003E报表设计器\u003C/li\u003E\n\u003Cli\u003E数据源配置\u003C/li\u003E\n\u003Cli\u003E报表预览\u003C/li\u003E\n\u003Cli\u003E报表导出\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"36-文件存储\" class=\"anchor\" href=\"#36-%E6%96%87%E4%BB%B6%E5%AD%98%E5%82%A8\"\u003E\u003C/a\u003E3.6 文件存储\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E支持多种云存储\n\u003Cul\u003E\n\u003Cli\u003E七牛云\u003C/li\u003E\n\u003Cli\u003E阿里云OSS\u003C/li\u003E\n\u003Cli\u003E腾讯云COS\u003C/li\u003E\n\u003Cli\u003E华为云OBS\u003C/li\u003E\n\u003Cli\u003EMinIO\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E文件上传下载\u003C/li\u003E\n\u003Cli\u003E文件预览\u003C/li\u003E\n\u003Cli\u003E文件管理\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"37-消息服务\" class=\"anchor\" href=\"#37-%E6%B6%88%E6%81%AF%E6%9C%8D%E5%8A%A1\"\u003E\u003C/a\u003E3.7 消息服务\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E短信服务\u003C/li\u003E\n\u003Cli\u003E邮件服务\u003C/li\u003E\n\u003Cli\u003E企业微信\u003C/li\u003E\n\u003Cli\u003E钉钉集成\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"38-定时任务\" class=\"anchor\" href=\"#38-%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1\"\u003E\u003C/a\u003E3.8 定时任务\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E基于Power-Job的分布式任务调度\u003C/li\u003E\n\u003Cli\u003E任务管理\u003C/li\u003E\n\u003Cli\u003E任务监控\u003C/li\u003E\n\u003Cli\u003E任务日志\u003C/li\u003E\n\u003C/ul\u003E"},{"id":"0000000000004. 后端开发","pId":0,"name":"4. 后端开发","parent":null,"order":3,"sort_id":13882341,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch3\u003E\n\u003Ca id=\"41-项目结构\" class=\"anchor\" href=\"#41-%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84\"\u003E\u003C/a\u003E4.1 项目结构\u003C/h3\u003E\n\u003Cp\u003Esrc/main/java/com/xjrsoft/\u003C/p\u003E\n\u003Cp\u003E├── common/ # 公共模块\u003C/p\u003E\n\u003Cp\u003E├── config/ # 配置类\u003C/p\u003E\n\u003Cp\u003E├── module/ # 业务模块\u003C/p\u003E\n\u003Cp\u003E│ ├── authority/ # 权限模块\u003C/p\u003E\n\u003Cp\u003E│ ├── system/ # 系统模块\u003C/p\u003E\n\u003Cp\u003E│ ├── workflow/ # 工作流\u003C/p\u003E\n\u003Cp\u003E│ ├── form/ # 表单模块\u003C/p\u003E\n\u003Cp\u003E│ └── ...\u003C/p\u003E\n\u003Cp\u003E└── ITCApplication.java\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"42-开发规范\" class=\"anchor\" href=\"#42-%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83\"\u003E\u003C/a\u003E4.2 开发规范\u003C/h3\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003E代码规范\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E遵循阿里巴巴Java开发手册\u003C/li\u003E\n\u003Cli\u003E使用Lombok简化代码\u003C/li\u003E\n\u003Cli\u003E统一异常处理\u003C/li\u003E\n\u003Cli\u003E统一返回格式\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E命名规范\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E类名: 大驼峰命名\u003C/li\u003E\n\u003Cli\u003E方法名: 小驼峰命名\u003C/li\u003E\n\u003Cli\u003E变量名: 小驼峰命名\u003C/li\u003E\n\u003Cli\u003E常量名: 全大写下划线分隔\u003C/li\u003E\n\u003Cli\u003E包名: 全小写点分隔\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E注释规范\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E类注释: 说明类的用途\u003C/li\u003E\n\u003Cli\u003E方法注释: 说明方法的功能、参数、返回值\u003C/li\u003E\n\u003Cli\u003E关键代码注释: 说明复杂逻辑\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch3\u003E\n\u003Ca id=\"43-开发流程\" class=\"anchor\" href=\"#43-%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B\"\u003E\u003C/a\u003E4.3 开发流程\u003C/h3\u003E\n\u003Col\u003E\n\u003Cli\u003E创建数据库表\u003C/li\u003E\n\u003Cli\u003E使用代码生成器生成基础代码\u003C/li\u003E\n\u003Cli\u003E修改生成的代码\u003C/li\u003E\n\u003Cli\u003E编写业务逻辑\u003C/li\u003E\n\u003Cli\u003E编写单元测试\u003C/li\u003E\n\u003Cli\u003E提交代码\u003C/li\u003E\n\u003C/ol\u003E"},{"id":"0000000000004.1 单体版","pId":0,"name":"4.1 单体版","parent":null,"order":4,"sort_id":14231109,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch2\u003E\n\u003Ca id=\"411单体版说明\" class=\"anchor\" href=\"#411%E5%8D%95%E4%BD%93%E7%89%88%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E4.1.1单体版说明\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"框架定位\" class=\"anchor\" href=\"#%E6%A1%86%E6%9E%B6%E5%AE%9A%E4%BD%8D\"\u003E\u003C/a\u003E框架定位\u003C/h3\u003E\n\u003Cp\u003E全代码开发平台以下简称“平台”是基于 \u003Cstrong\u003ESpring Boot 2.7.5 + Vue 3\u003C/strong\u003E 的\u003Cstrong\u003E单体架构\u003C/strong\u003E快速开发框架整合了集团技术中台的核心能力提供开箱即用的开发环境适用于\u003Cstrong\u003E定制化业务系统\u003C/strong\u003E开发。\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E核心目标\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E降低开发门槛\u003C/strong\u003E :提供标准化技术栈,减少环境搭建和基础组件开发成本。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E提升开发效率\u003C/strong\u003E :内置代码生成器、零代码表单、工作流引擎等工具,支持快速业务开发。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E保障技术合规\u003C/strong\u003E :遵循集团技术规范,集成安全、权限、信创数据库等企业级能力。\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"技术架构图-\" class=\"anchor\" href=\"#%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84%E5%9B%BE-\"\u003E\u003C/a\u003E\u003Cstrong\u003E技术架构图\u003C/strong\u003E \u003Cimg src=\"https://foruda.gitee.com/images/1747214519828804736/ff0a505a_5089312.png\" alt=\"技术架构图.png\"\u003E\n\u003C/h3\u003E\n\u003Ch3\u003E\n\u003Ca id=\"本地开发流程\" class=\"anchor\" href=\"#%E6%9C%AC%E5%9C%B0%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B\"\u003E\u003C/a\u003E\u003Cstrong\u003E本地开发流程\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E如下图单体版所有代码都在本地前后端分离后端代码都在一个程序内所以开发调试都是在本地相对简单。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747212342688998492/0ade0625_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"412初始化步骤\" class=\"anchor\" href=\"#412%E5%88%9D%E5%A7%8B%E5%8C%96%E6%AD%A5%E9%AA%A4\"\u003E\u003C/a\u003E4.1.2初始化步骤\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"数据库初始化\" class=\"anchor\" href=\"#%E6%95%B0%E6%8D%AE%E5%BA%93%E5%88%9D%E5%A7%8B%E5%8C%96\"\u003E\u003C/a\u003E\u003Cstrong\u003E数据库初始化\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E数据库初始化见项目的script/mysql全库.sql或人大金仓全库脚本.sql\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"后端配置\" class=\"anchor\" href=\"#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E\u003Cstrong\u003E后端配置\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E创建配置文件application-local.yml用来做本地开发的配置\u003C/p\u003E\n\u003Cp\u003E在application.yml配置文件中添加spring.profiles.active=local启用该新增的配置文件。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747211515541039837/08f58227_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E在新增的配置文件中通过增加数据库链接、redis链接、单点回调地址、前端路由地址、生成代码路径等配置项\u003C/p\u003E\n\u003Cp\u003E用自己的配置覆盖application.yml中的默认配置项。\u003C/p\u003E\n\u003Cp\u003E注其他环境的配置文件也通过这种方式进行管理。\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"启动后端\" class=\"anchor\" href=\"#%E5%90%AF%E5%8A%A8%E5%90%8E%E7%AB%AF\"\u003E\u003C/a\u003E\u003Cstrong\u003E启动后端\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E直接运行Application文件即可启动后端项目。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747211650228285733/e76aeb9a_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"启动前端\" class=\"anchor\" href=\"#%E5%90%AF%E5%8A%A8%E5%89%8D%E7%AB%AF\"\u003E\u003C/a\u003E\u003Cstrong\u003E启动前端\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E\u003Cstrong\u003E前端运行前配置\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E修改.env文件配置前端项目端口号VITE_PORT=3100自定义\u003C/p\u003E\n\u003Cp\u003E修改.env.development文件修改后端服务地址VITE_GLOB_API_URL=\u003Ca href=\"http://127.0.0.1:8080/\"\u003Ehttp://127.0.0.1:8080/\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747216321038197144/218ddcf2_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E前端运行\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E安装依赖cd front npm install或pnpm install\u003C/p\u003E\n\u003Cp\u003E运行npm run serve即可启动前端项目\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747211927367914726/9f5258f4_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"413开发示例\" class=\"anchor\" href=\"#413%E5%BC%80%E5%8F%91%E7%A4%BA%E4%BE%8B\"\u003E\u003C/a\u003E4.1.3开发示例\u003C/h2\u003E\n\u003Cp\u003E以下会演示创建一个带流程的测试表单以供参考\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003E打开前端首页输入用户名密码进行登录\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747278951106814397/d4b1ae65_5089312.png\" alt=\"LoginPage.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E创建数据表\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747290298249541744/c7b5922d_5089312.png\" alt=\"workOrderPage.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E点击左侧菜单在线开发-\u0026gt;代码生成\n\u003Cstrong\u003E功能说明\u003C/strong\u003E\n界面优先不需要事先准备表先进行拖拉拽出界面下一步后会自动根据表单生成表字段进行编辑\n数据优先(较常用):需要事先准备表,拖拉拽的每个组件需要和表字段进行关联\n简易模版可以拖拉拽出不需要数据表的的功能\n快速生成代码根据所选的表根据表字段自动生成表单\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747279792556773154/02f67012_5089312.png\" alt=\"CodeCreate.jpg\"\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E注\u003C/strong\u003E需根据实际业务需求进行代码生成这里仅演示数据优先\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E填写基本信息\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747291191926379723/769fb2df_5089312.png\" alt=\"基本信息.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E拖拉拽表单\u003C/p\u003E\n\u003Cp\u003E需要从左侧组件框里找到合适的组件类型拖入表单区域然后选中组件后设置其右侧的属性绑定表、字段等属性\n响应式(推荐开启):开启后能够根据不同的屏幕尺寸、设备类型或容器大小自动调整其布局、样式或功能,以提供最佳的用户体验\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747291002358251764/9b509243_5089312.png\" alt=\"表单设计.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E表单事件\u003C/p\u003E\n\u003Cp\u003E在此处可以添加自定义API、JS脚本到表单节点比如表单加载前后、提交表单前后\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E界面设计\u003C/p\u003E\n\u003Cp\u003E查询配置定义列表页的查询项\n列表配置定义列表页的列属性、配置左侧的树配置、调整列的不同属性比如对齐方式、自适应宽度、列头筛选等\n按钮设置定义列表上的按钮以及自定义按钮需要注意如果开启流程需要勾选发起审批\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747291905932415985/ef482927_5089312.png\" alt=\"发起审批按钮.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E代码预览\u003C/p\u003E\n\u003Cp\u003E此步可以查看生成出来的代码\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E菜单设置\u003C/p\u003E\n\u003Cp\u003E设置业务菜单信息可以将生成的代码打包下载成独立文件后续可以导入也可以直接将代码文件生成到项目中\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747292141189438827/73aabd22_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E生成代码与拷贝\u003C/p\u003E\n\u003Cp\u003E前端代码会生成到配置文件application.yml中的 xjrsoft.generate.webPath=xxxxx 配置下示例配置的路径是C:\\Users\\ITC\\Desktop\\codeGenerate\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747295445541338395/494509b7_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E后端由于选择了直接生成到项目中后端文件会生成到src/main/java/com/xjrsoft/module/下\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747295518660126439/7ed5f589_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E拷贝代码到项目将生成的文件C:\\Users\\ITC\\Desktop\\codeGenerate\\src目录下的api和views拷贝到项目的src对应的目录下\n\u003Cimg src=\"https://foruda.gitee.com/images/1747292560563037360/0362eeaf_5089312.png\" alt=\"image.png\"\u003E\napi目录统一存放所有API请求定义避免接口URL散落在各个组件中便于维护\nviews目录统一存放了页面组件实现业务界面和用户交互\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E注可以在api和views下添加自己的业务代码\u003C/strong\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E重启项目\u003C/p\u003E\n\u003Cp\u003E重启项目后刷新页面即可看到新增的菜单和功能\n注此时表单还没有进行流程配置还需要配置流程\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747292873407380427/89ea4b69_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E新增流程设计\u003C/p\u003E\n\u003Cp\u003E点击菜单 工作流程-\u0026gt;流程设计 点击新增流程按钮\n1、从左侧拖入需要的用户节点、网关、结束节点等\n2、填写右侧流程属性信息选择默认表单为之前创建的工单\n3、选择某个节点设置节点审批人\n4、选择关联功能tab-\u0026gt;勾选是否启用按钮-\u0026gt;选择功能表单-\u0026gt;流程已添加表单-\u0026gt;勾选工单点击确认-\u0026gt;最后选择更新表单按钮-\u0026gt;保存模版\n注后续表单有字段调整也需要在此处更新表单并保存\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747293468659062907/22cfb1e1_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E新增表单完成\u003C/p\u003E\n\u003Cp\u003E刷新页面再次进入刚才新增的菜单可以看到表单已经关联流程\n至此新增带流程表单就完成了\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747293620315907556/502a0f8d_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E"},{"id":"0000000000004.2 微服务版","pId":0,"name":"4.2 微服务版","parent":null,"order":5,"sort_id":14231112,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch2\u003E\n\u003Ca id=\"421微服务版说明\" class=\"anchor\" href=\"#421%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%89%88%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E4.2.1微服务版说明\u003C/h2\u003E\n\u003Cp\u003E微服务版本后端是共用一套基础服务开发人员在本地运行自己的业务服务连入集中的开发环境进行功能开发。\u003C/p\u003E\n\u003Cp\u003E前端是只有一个前端项目不做拆分本地运行整个前端项目开发人员在上面添加自己的业务前端代码连接共用的后端开发环境。\u003C/p\u003E\n\u003Cp\u003E如下图微服务版前端和业务服务后端的代码在本地后端公共服务是部署在远程本地接入远程的公共服务环境再连回本地业务服务相对复杂。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747212440221630322/86c493a8_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E开发时生成的业务代码需要开发人员访问共用的开发环境的base服务把代码拉下来与本地的业务代码比对后合并到本地代码中再提交到代码仓库。后期会添加把生成的业务代码打包下载的功能。\u003C/p\u003E\n\u003Cp\u003E因此前端部分的部署运行方式同4.1章节的单体版本只是把后端地址改成共用的开发环境的gateway服务的地址。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"422微服务版配置\" class=\"anchor\" href=\"#422%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%89%88%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E4.2.2微服务版配置\u003C/h2\u003E\n\u003Cp\u003E微服务应用的配置主要是使用SpringBoot和Nacos的配置方式。\u003C/p\u003E\n\u003Cp\u003ESpringBoot的bootstrap.yml配置了微服务应用的名称和端口以及要接入的Nacos的注册和配置中心的地址、命名空间、分组还有其他本地开发相关的或不能放置到Nacos的配置项。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"423本地开发\" class=\"anchor\" href=\"#423%E6%9C%AC%E5%9C%B0%E5%BC%80%E5%8F%91\"\u003E\u003C/a\u003E4.2.3本地开发\u003C/h2\u003E\n\u003Col\u003E\n\u003Cli\u003E在bootstrap.yml中给业务服务确定端口号和服务名。\u003C/li\u003E\n\u003Cli\u003E修改spring.cloud.nacos的注册和配置中心为共用开发环境中的nacos地址、命名空间和分组。\u003C/li\u003E\n\u003Cli\u003E启动服务。\u003C/li\u003E\n\u003Cli\u003E如果业务服务需要使用自己的数据库是在共用开发环境的多数据源中进行配置使用的。\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003E\u003Cstrong\u003E本地开发业务服务接入远程公共服务\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003E本地启动整个前端应用例如local-front连接的后端设置为远程公共服务的gateway服务\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E本地启动要开发的业务服务例如local-business-service配置接入nacos的注册中心\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E修改gateway服务路由的配置spring.cloud.gateway.routes添加自己业务的资源路径路由到的本地服务的定义例如\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747213070211462278/60c209b2_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E就是将前端应用/ast_asset/**路径的请求直接路由到本地开发的业务服务asset-service-yyn即可将本地前后端应用对应运行起来进行开发。\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E注意\u003C/strong\u003E由于gateway的路由机制是从前往后匹配匹配到即直接路由\u003Cstrong\u003E因此业务服务的路由需要放置在最后一个通用路由规则之前\u003C/strong\u003E防止被路由到base服务去。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747213264038062471/3decb966_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch2\u003E\n\u003Ca id=\"424开发示例\" class=\"anchor\" href=\"#424%E5%BC%80%E5%8F%91%E7%A4%BA%E4%BE%8B\"\u003E\u003C/a\u003E4.2.4开发示例\u003C/h2\u003E\n\u003Cp\u003E以下演示微服务版带流程的测试表单以供参考\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003Enacos上确定所有服务都已启动\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747304223815212287/9942d5d3_5089312.png\" alt=\"服务列表.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E配置并启动前端\n前端的.env文件的VITE_GLOB_API_URL指向远程公共服务的gateway服务ip:port\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747304636838449768/a9a6478a_5089312.png\" alt=\"前端接口配置.jpg\"\u003E\n启动前端输入用户名密码进行登录\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747304872595993981/a862ea0f_5089312.png\" alt=\"微服务登录页.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E创建并启动业务服务\u003C/p\u003E\n\u003Cp\u003E创建启动业务服务后配置中接入nacos配置中心\n配置cloud.nacos.config.server-addr=nacos配置中心地址\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747360157527309132/bb08e4f1_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003Enacos添加业务资源路径\n在nacos的配置中心找到对应的gateway配置编辑spring.cloud.gateway.routes增加自己的业务资源路径发布更新即可\n注意需要将新增的配置放到最后一个通用路由规则之前因为gateway匹配机制是从前向后的\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747361981411700632/e8a888f4_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E准备业务数据表与新增代码生成\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E创建数据表\n\u003Cimg src=\"https://foruda.gitee.com/images/1747290298249541744/c7b5922d_5089312.png\" alt=\"workOrderPage.jpg\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E点击左侧菜单在线开发-\u0026gt;代码生成\n\u003Cstrong\u003E功能说明\u003C/strong\u003E\n界面优先不需要事先准备表先进行拖拉拽出界面下一步后会自动根据表单生成表字段进行编辑\n数据优先(较常用):需要事先准备表,拖拉拽的每个组件需要和表字段进行关联\n简易模版可以拖拉拽出不需要数据表的的功能\n快速生成代码根据所选的表根据表字段自动生成表单\n\u003Cimg src=\"https://foruda.gitee.com/images/1747279792556773154/02f67012_5089312.png\" alt=\"CodeCreate.jpg\"\u003E\n\u003Cstrong\u003E注\u003C/strong\u003E需根据实际业务需求进行代码生成这里仅演示数据优先\u003C/li\u003E\n\u003Cli\u003E填写基本信息\n\u003Cimg src=\"https://foruda.gitee.com/images/1747361659412198664/9541fe62_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E拖拉拽表单\n需要从左侧组件框里找到合适的组件类型拖入表单区域然后选中组件后设置其右侧的属性绑定表、字段等属性\n响应式(推荐开启):开启后能够根据不同的屏幕尺寸、设备类型或容器大小自动调整其布局、样式或功能,以提供最佳的用户体验\n\u003Cimg src=\"https://foruda.gitee.com/images/1747361734016395152/8cb24133_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E表单事件\n在此处可以添加自定义API、JS脚本到表单节点比如表单加载前后、提交表单前后\u003C/li\u003E\n\u003Cli\u003E界面设计\n查询配置定义列表页的查询项\n列表配置定义列表页的列属性、配置左侧的树配置、调整列的不同属性比如对齐方式、自适应宽度、列头筛选等\n按钮设置定义列表上的按钮以及自定义按钮需要注意如果开启流程需要勾选发起审批\n\u003Cimg src=\"https://foruda.gitee.com/images/1747291905932415985/ef482927_5089312.png\" alt=\"发起审批按钮.jpg\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E代码预览\n此步可以查看生成出来的代码\u003C/li\u003E\n\u003Cli\u003E菜单设置\n设置业务菜单信息可以将生成的代码打包下载成独立文件后续可以复制到项目\n\u003Cimg src=\"https://foruda.gitee.com/images/1747379051391602809/6b82b6a0_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E生成代码与拷贝\u003C/p\u003E\n\u003Cp\u003E注基础服务是公用的所以代码生成都要用打包下载做例子包括前端的\n所以这里选择打包下载会直接将前后端代码打包成压缩包自动下载\n\u003Cimg src=\"https://foruda.gitee.com/images/1747380201827995442/214128b3_5089312.png\" alt=\"image.png\"\u003E\n解压包结构如下back后端项目代码front前端项目代码\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747379818721970308/37296236_5089312.png\" alt=\"image.png\"\u003E\n只需要将其复制到对应前后端项目中即可\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747379980642231518/ceb581fe_5089312.png\" alt=\"image.png\"\u003E\n\u003Cimg src=\"https://foruda.gitee.com/images/1747380250209430654/288e1939_5089312.png\" alt=\"image.png\"\u003E\napi目录统一存放所有API请求定义避免接口URL散落在各个组件中便于维护\nviews目录统一存放了页面组件实现业务界面和用户交互\n\u003Cstrong\u003E注可以在api和views下添加自己的业务代码\u003C/strong\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E重启项目\u003C/p\u003E\n\u003Cp\u003E重启项目后刷新页面即可看到新增的菜单和功能\n注此时表单还没有进行流程配置还需要配置流程\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747362039900525494/d32fab70_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E新增流程设计\u003C/p\u003E\n\u003Cp\u003E点击菜单 工作流程-\u0026gt;流程设计 点击新增流程按钮\n1、从左侧拖入需要的用户节点、网关、结束节点等\n2、填写右侧流程属性信息选择默认表单为之前创建的工单\n3、选择某个节点设置节点审批人\n4、选择关联功能tab-\u0026gt;勾选是否启用按钮-\u0026gt;选择功能表单-\u0026gt;流程已添加表单-\u0026gt;勾选工单点击确认-\u0026gt;最后选择更新表单按钮-\u0026gt;保存模版\n注后续表单有字段调整也需要在此处更新表单并保存\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747293468659062907/22cfb1e1_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E新增表单完成\u003C/p\u003E\n\u003Cp\u003E刷新页面再次进入刚才新增的菜单可以看到表单已经关联流程\n至此新增带流程表单就完成了\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747293620315907556/502a0f8d_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch2\u003E\n\u003Ca id=\"425跨服务调用\" class=\"anchor\" href=\"#425%E8%B7%A8%E6%9C%8D%E5%8A%A1%E8%B0%83%E7%94%A8\"\u003E\u003C/a\u003E4.2.5跨服务调用\u003C/h2\u003E\n\u003Cp\u003E注跨服务调用如 workorder-service 调用 user-service 或其他服务)使用 FeignClient\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E假设user-service服务提供getInfoByUserName接口\n\u003Cimg src=\"https://foruda.gitee.com/images/1747383195213235308/279ba8cd_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E在workorder-service中定义FeignClient客户端接口\n\u003Cimg src=\"https://foruda.gitee.com/images/1747382747855204636/7a5438a3_5089312.png\" alt=\"image.png\"\u003E\nvalue指定目标服务名必须与注册中心一致\npath指定该服务的统一API前缀\n@GetMapping与目标服务的接口定义一致\u003C/li\u003E\n\u003Cli\u003E在workorder-service的业务代码中调用\n\u003Cimg src=\"https://foruda.gitee.com/images/1747383026389748116/46f0c427_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003C/ul\u003E"},{"id":"0000000000004.3 多租户模式","pId":0,"name":"4.3 多租户模式","parent":null,"order":6,"sort_id":14231114,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch2\u003E\n\u003Ca id=\"431-开启多租户模式\" class=\"anchor\" href=\"#431-%E5%BC%80%E5%90%AF%E5%A4%9A%E7%A7%9F%E6%88%B7%E6%A8%A1%E5%BC%8F\"\u003E\u003C/a\u003E\u003Cstrong\u003E4.3.1 开启多租户模式\u003C/strong\u003E\n\u003C/h2\u003E\n\u003Cp\u003E全开框架默认是单租户模式如果需要开启多租户模式需要修改前端代码和后端代码的配置文件。\u003C/p\u003E\n\u003Cp\u003E1后端配置修改\n在项目 spring boot 配置文件中加上以下配置:\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"properties\" class=\"properties\"\u003E\u003Ccode\u003Exjrsoft:\n tenant:\n enabled: true #是否启用多租户\n admin-tenant-code: system #管理员租户编码\n tenant-field: tenant_id #多租户 区分字段enantCode\n default-tenant-code: system\n is-use-default-tenant: true\n hidden-sub-menu-ids:\n - 1419273699655498176\n - 1700041673784094722\n ignore-table: #忽略多租户的表\n - xjr_app_func_design\n - xjr_app_menu\n - xjr_app_page_design\n - xjr_area\n - xjr_code_schema\n - xjr_databaselink\n - xjr_language\n - xjr_language_type\n - xjr_liteflow_chain\n - xjr_liteflow_script\n - xjr_menu\n - xjr_menu_button\n - xjr_menu_column\n - xjr_menu_form\n - xjr_report\n - xjr_report_relation\n - xjr_subsystem\n - xjr_tenant\n - xjr_tenant_authorize\n - xjr_app_menu_button\n - xjr_app_menu_column\n - xjr_app_menu_form\n - xjr_app_authorize\n - xjr_user\n - xjr_department\n - xjr_user_dept_relation\n - xjr_authorize\n - DEPT_TREE\n - MENU_TREE\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E2前段配置修改\n在环境变量配置文件中加上变量 VITE_TENANT_ENABLED=true,如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747133990335423262/415d8da2_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E3给数据库表加上租户字段。\n除了以上步骤1中配置了租户忽略的表ignore-tabl:配置中列出的表))之外,其它数据表都加上 tenant_id 字段\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E加租户字段语句示例ALTER TABLE xxx ADD tenant_id int8 NULL;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Ch2\u003E\n\u003Ca id=\"432-新建租户站点\" class=\"anchor\" href=\"#432-%E6%96%B0%E5%BB%BA%E7%A7%9F%E6%88%B7%E7%AB%99%E7%82%B9\"\u003E\u003C/a\u003E4.3.2 新建租户(站点)\u003C/h2\u003E\n\u003Cp\u003E1.使用系统管理员账号账号admin租户码system登录系统。\u003C/p\u003E\n\u003Cp\u003E2.找到“系统管理---租户管理\"模块,点击新增租户,填写唯一的租户名称和租户编码以及其它信息,如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747134803351893104/ba694640_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E3.点击功能授权,按需授予租户系统菜单的访问权限,如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747135091508522365/8e97e58f_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"433-配置站点管理员和员工角色\" class=\"anchor\" href=\"#433-%E9%85%8D%E7%BD%AE%E7%AB%99%E7%82%B9%E7%AE%A1%E7%90%86%E5%91%98%E5%92%8C%E5%91%98%E5%B7%A5%E8%A7%92%E8%89%B2\"\u003E\u003C/a\u003E4.3.3 配置站点管理员和员工角色\u003C/h2\u003E\n\u003Cp\u003E1.使用系统管理员账号 admin以目标站点的租户身份登录系统如下图所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747135965151101830/21c90183_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2.进入到角色管理模块,创建一个站点管理员角色和至少一个用户,将用户添加为站点管理员角色、如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747136140659120132/5d28a082_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E3.打开功能授权、接口授权,将菜单、按钮、列表和接口的所有权限授予站点管理员,使其拥有对站点的最高级别管理权限,如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747136279698675277/227d428c_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E4.新建一个员工角色,按需授予其基本功能菜单权限。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"434-表单个性化配置\" class=\"anchor\" href=\"#434-%E8%A1%A8%E5%8D%95%E4%B8%AA%E6%80%A7%E5%8C%96%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E4.3.4 表单个性化配置\u003C/h2\u003E\n\u003Cp\u003E假设场景租户 B 需要用到某张表单 form01而该表单已经存在 A 租户下,并且已经生成了代码。\u003C/p\u003E\n\u003Cp\u003E1.可以通过以下步骤完成表单 form01 在租户 B 下的配置:\u003C/p\u003E\n\u003Cp\u003E(1).将 xjr_form_template 表中的 id 字段的主键属性去掉;给 tenant_id 字段设置默认值为 1创建联合主键(id,tenant_id)。\u003C/p\u003E\n\u003Cp\u003Esql 语句参考如下:\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E去掉id字段的主键属性\nALTER TABLE xjr_form_template DROP CONSTRAINT \"xxxx\"; ---xxxx请改成具体的主键名称\n给tenant_id字段设置默认值\nALTER TABLE xjr_form_template ALTER COLUMN tenant_id SET DEFAULT 1;\n创建联合主键的语句\nALTER TABLE xjr_form_template ADD CONSTRAINT xjr_form_template_pk PRIMARY KEY (id,tenant_id);\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E(2).将表单 form01 对应的表单数据拷贝一份xjr_form_template 表)为 insert 语句;保持 id 字段的值不变,将 tenant_id 字段修改为租户 B 的租户 id执行 insert 语句。\n如图所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747138096698058921/3bbc3771_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2.使用管理员账号 admin 以租户 B 的身份登录系统,在“表单设计”模块的“完整配置--\u0026gt; 渲染覆盖配置”中,可以根据租户需求,对表单详情页字段的名称和显隐、列表页展示字段、列表查询栏进行个性化配置。\u003C/p\u003E\n\u003Cp\u003E配置方式直接拷贝表单代码的 config.ts 文件中的配置粘贴到“渲染覆盖配置“一栏即可。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747138515604406197/4471df92_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747138630494079227/fbf11c05_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E3.将需要进行个性化配置的表单的前端代码./components/config.ts路径中的配置useCustomConfig改成true.\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750919818808105264/f93146a1_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E配置示例\n现在用A租户的站点管理员账号登录系统尝试对表单form01做以下配置\n1搜索栏配置成只保留姓名。\n2列表栏展示姓名、性别、年龄并且姓名字段改成显示成“名字”占用500px宽度。\n3表单详情页配置成显示姓名、性别不显示年龄并且将性别字段改成显示成英文“gender”\u003C/p\u003E\n\u003Cp\u003E配置修改如下\n\u003Cimg src=\"https://foruda.gitee.com/images/1747220797689092581/bc7e5d1f_9136487.png\" alt=\"image.png\"\u003E\n\u003Cimg src=\"https://foruda.gitee.com/images/1747220741746668744/729e685a_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E效果如下\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747220989301927222/a352f613_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747221007996399259/e4ba926a_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E其它租户的表单个性化配置可以通过同样的方式实现可以用目标租户的站点管理员账号登录后进行配置也可以用系统管理员admin以目标租户身份登录进行配置。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"435-流程设计\" class=\"anchor\" href=\"#435-%E6%B5%81%E7%A8%8B%E8%AE%BE%E8%AE%A1\"\u003E\u003C/a\u003E4.3.5 流程设计\u003C/h2\u003E\n\u003Cp\u003E配置方式使用系统管理员admin以目标租户的身份登录系统进入到“流程定义”模块按照常规流程定义步骤完成该租户下指定表单的流程定义。\u003C/p\u003E\n\u003Cp\u003E示例\n1以A租户的身份登录系统进行流程设计\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747218380857062414/65344e21_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E发起审批效果如下\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747219434072141869/0a217f71_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2以B租户的身份登录系统进行流程设计\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747218586903338916/35f09db4_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E发起审批效果如下\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747219248236210313/90be173d_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"436-代码逻辑差异化\" class=\"anchor\" href=\"#436-%E4%BB%A3%E7%A0%81%E9%80%BB%E8%BE%91%E5%B7%AE%E5%BC%82%E5%8C%96\"\u003E\u003C/a\u003E4.3.6 代码逻辑差异化\u003C/h2\u003E\n\u003Cp\u003E如果是业务代码层面的差异不能通过表单自定义配置覆盖的情况需将差异的代码修改为接口中执行不同租户通过配置不同的接口事件触发从而执行差异化的业务代码逻辑。\u003C/p\u003E\n\u003Cp\u003E可供使用的接口配置有流程回调事件配置、表单事件配置组件触发事件配置。\u003C/p\u003E\n\u003Cp\u003E1.流程回调事件配置:如图所示,可以在流程设计页面中,在流程审批过程中的各个环节配置事件以执行个性化的业务逻辑。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1748326679916683718/bb128c96_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2.表单事件配置如下图示例在初始化表单阶段配置一个事件节点调用api记录用户查看表单的事件。\u003Cimg src=\"https://foruda.gitee.com/images/1748316825985563648/8fbd2b22_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E组件触发事件配置如下图示例给姓名字段配上blur事件在失去焦点时如果值不是男、女则默认赋值为“男”\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1748318936169970097/e2e43bf1_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"437-跨租户审批\" class=\"anchor\" href=\"#437-%E8%B7%A8%E7%A7%9F%E6%88%B7%E5%AE%A1%E6%89%B9\"\u003E\u003C/a\u003E4.3.7 跨租户审批\u003C/h2\u003E\n\u003Cp\u003E打开跨租户的待办页面时因为一个页面中包含很多个请求只有第一个主请求有业务id的能查询数据所属租户从而切换其他逻辑到另一个租户中处理才能正确返回跨租户的数据\u003C/p\u003E\n\u003Cp\u003E但是页面后续的其他请求例如枚举、触发事件之类的也需要同步传所属租户id才能正确返回跨租户的数据但是组件数量太多修改的工作量很大。\u003C/p\u003E\n\u003Cp\u003E因此使用另一种切租户的方案\u003C/p\u003E\n\u003Cp\u003E待办列表返回有其他租户的数据打开时如果单据不是当前租户的话界面上提示用户需要切换租户后才能打开是否切换是则自动切租户再跳转需要的待办否则取消打开单据。\u003C/p\u003E\n\u003Cp\u003E功能图示\n1.点击待办列表中的待审批流程,如果流程是从其它租户发起,则会弹出切换租户确定框。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747961936228427514/458b22db_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2.切换完租户,页面右上角会弹出切换租户成功通知,用户可以继续完成审批操作。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747962064380499873/9f628f5b_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch1\u003E\n\u003Ca id=\"438-以某个租户的身份执行数据库查询\" class=\"anchor\" href=\"#438-%E4%BB%A5%E6%9F%90%E4%B8%AA%E7%A7%9F%E6%88%B7%E7%9A%84%E8%BA%AB%E4%BB%BD%E6%89%A7%E8%A1%8C%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9F%A5%E8%AF%A2\"\u003E\u003C/a\u003E4.3.8 以某个租户的身份执行数据库查询。\u003C/h1\u003E\n\u003Cp\u003E如果想临时以某个租户的身份执行一些数据库查询可以通过以下方式实现\u003C/p\u003E\n\u003Cp\u003Etry {\nTenantUtil.doInTenant(1000000); --注意该语句必须放在try{}代码块的第一行以确保TenantUtil.doInTenant(tenantId)和TenantUtil.doInTenant()能同时得到执行\n----代码块在此代码块中的数据库查询将会以id为1000000的租户的身份进行\n}finally{\nTenantUtil.doInTenant();\n}\u003C/p\u003E\n\u003Ch1\u003E\n\u003Ca id=\"439系统数据迁移功能\" class=\"anchor\" href=\"#439%E7%B3%BB%E7%BB%9F%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB%E5%8A%9F%E8%83%BD\"\u003E\u003C/a\u003E4.3.9系统数据迁移功能\u003C/h1\u003E\n\u003Cp\u003E系统数据迁移功能可以用于跨环境数据迁移和跨租户数据复制。\u003C/p\u003E\n\u003Cp\u003E1.相关概念说明:\u003C/p\u003E\n\u003Cp\u003E跨环境数据迁移简称数据迁移指的是将数据从A环境迁移到B环境常见于将数据从测试环境迁移到生产环境或者从生产环境迁移到测试环境。\u003C/p\u003E\n\u003Cp\u003E跨租户数据复制:简称数据复制,指的是新建租户时,可以将现有租户的基础数据复制到新租户,以简化新租户的数据初始化过程。\u003C/p\u003E\n\u003Cp\u003E2.功能讲解\u003C/p\u003E\n\u003Cp\u003E1导出工作区在导出工作区选择需要导出的项目然后点击“导出所选项目”完成对数据的导出。\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E说明无论是数据迁移还是数据复制导出步骤是一样的\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750921399816086964/dfaef3ea_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2导入工作区需要进行数据迁移时请选择“覆盖模式导入”需要数据复制时请选择“租户模式导入”。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750921377230929590/0616a8fe_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E"},{"id":"0000000000005. 前端开发","pId":0,"name":"5. 前端开发","parent":null,"order":7,"sort_id":13882342,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Cp\u003E.keep\u003C/p\u003E"},{"id":"0000000000006. 移动端开发","pId":0,"name":"6. 移动端开发","parent":null,"order":8,"sort_id":13882343,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Cp\u003E.keep\u003C/p\u003E"},{"id":"0000000000007. 大屏开发","pId":0,"name":"7. 大屏开发","parent":null,"order":9,"sort_id":13882344,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Cp\u003E.keep\u003C/p\u003E"},{"id":"0000000000008. 外部组件集成","pId":0,"name":"8. 外部组件集成","parent":null,"order":10,"sort_id":13882347,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch1\u003E\n\u003Ca id=\"wps集成\" class=\"anchor\" href=\"#wps%E9%9B%86%E6%88%90\"\u003E\u003C/a\u003Ewps集成\u003C/h1\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750239753302395729/17b3817e_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E金山文档在线预览编辑服务提供了文件预览、文件编辑服务\u003C/p\u003E\n\u003Cp\u003E框架中实现了wps所需要的回调接口由文档中台直接回调业务系统中的接口获取文件元数据、保存新文件、获取用户信息、通知等接口\u003C/p\u003E\n\u003Cp\u003E流程\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E文档打开时会从后端获取文件在线编辑链接\u003C/li\u003E\n\u003Cli\u003E前端向文档中台发起加载文件、权限等信息请求\u003C/li\u003E\n\u003Cli\u003E文档中台向后端回调文件元数据、下载文件接口后端返回文件元数据、文件数据\u003C/li\u003E\n\u003Cli\u003E文档中台向前端返回文件、权限等信息\u003C/li\u003E\n\u003Cli\u003E前端根据文件、权限、水印渲染文件内容\u003C/li\u003E\n\u003Cli\u003E保存文件编辑后会向中台发送文件保存新版本请求文档中台回调后台上传文件新版本接口后端返回保存结果后中台返回保存结果\u003C/li\u003E\n\u003Cli\u003E通知用户加入或退出协作请求获取用户信息回调接口请求通知回调接口通知对接方此文件目前有哪些人在协作\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch2\u003E\n\u003Ca id=\"直连模式\" class=\"anchor\" href=\"#%E7%9B%B4%E8%BF%9E%E6%A8%A1%E5%BC%8F\"\u003E\u003C/a\u003E直连模式\u003C/h2\u003E\n\u003Cp\u003E直连模式是业务系统不经由其他系统直接对接文档中台\u003C/p\u003E\n\u003Cp\u003E注需要在文档中台系统上配置回调接口地址为业务系统地址\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"启用和配置\" class=\"anchor\" href=\"#%E5%90%AF%E7%94%A8%E5%92%8C%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E启用和配置\u003C/h3\u003E\n\u003Cp\u003E在后端配置文件中的xjrsoft下配置weboffice.enabled=true即可启用\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750318578722236951/31c7af89_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"效果\" class=\"anchor\" href=\"#%E6%95%88%E6%9E%9C\"\u003E\u003C/a\u003E效果\u003C/h3\u003E\n\u003Cp\u003E前端字段类型为upload的组件后点击编辑文档按钮\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750325934300638171/e6556e06_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E只读模式\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750326025405925810/4b8b8b9a_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E编辑模式 \u003Cimg src=\"https://foruda.gitee.com/images/1750326226217177980/f96cd99e_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E保存文件\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750326252197848283/cde8fa70_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"防火墙申请\" class=\"anchor\" href=\"#%E9%98%B2%E7%81%AB%E5%A2%99%E7%94%B3%E8%AF%B7\"\u003E\u003C/a\u003E防火墙申请\u003C/h3\u003E\n\u003Cp\u003E直连模式需要申请业务端到文档中台间的防火墙\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"代理模式\" class=\"anchor\" href=\"#%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F\"\u003E\u003C/a\u003E代理模式\u003C/h2\u003E\n\u003Cp\u003E代理模式流程\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E是业务系统提前向代理服务注册本系统的前缀及回调地址\u003C/li\u003E\n\u003Cli\u003E前端向后端获取文件在线编辑链接\u003C/li\u003E\n\u003Cli\u003E前端向文档中台发起加载文件、权限等信息请求请求url中的文件id带上本系统的前缀\u003C/li\u003E\n\u003Cli\u003E文档中台回调代理服务代理服务根据回调的文件id前缀找到对应的业务系统地址\u003C/li\u003E\n\u003Cli\u003E代理服务根据业务系统地址转发请求到业务系统回调文件元数据、下载文件等接口\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch3\u003E\n\u003Ca id=\"启用和配置-1\" class=\"anchor\" href=\"#%E5%90%AF%E7%94%A8%E5%92%8C%E9%85%8D%E7%BD%AE-1\"\u003E\u003C/a\u003E启用和配置\u003C/h3\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003E业务系统配置文件中增加系统标识用于区分不同业务系统\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750328599179592003/2e3a974f_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E在代理服务系统中配置系统前缀和系统地址映射\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750327676529451748/ee1be83f_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch3\u003E\n\u003Ca id=\"效果-1\" class=\"anchor\" href=\"#%E6%95%88%E6%9E%9C-1\"\u003E\u003C/a\u003E效果\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750328481648245944/d29ee85e_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"防火墙申请-1\" class=\"anchor\" href=\"#%E9%98%B2%E7%81%AB%E5%A2%99%E7%94%B3%E8%AF%B7-1\"\u003E\u003C/a\u003E防火墙申请\u003C/h3\u003E\n\u003Cp\u003E代理模式需要申请\u003C/p\u003E\n\u003Cp\u003E1、业务系统到文档中台的防火墙\u003C/p\u003E\n\u003Cp\u003E2、代理系统到业务系统的防火墙\u003C/p\u003E"},{"id":"0000000000009. 部署指南","pId":0,"name":"9. 部署指南","parent":null,"order":11,"sort_id":13882350,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch3\u003E\n\u003Ca id=\"91-环境准备\" class=\"anchor\" href=\"#91-%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87\"\u003E\u003C/a\u003E9.1 环境准备\u003C/h3\u003E\n\u003Col\u003E\n\u003Cli\u003E可运行JDK环境信创环境arm架构/麒麟系统jdk为openjdk8以上\u003C/li\u003E\n\u003Cli\u003E生产环境建议双机热备加前置机共三台\u003C/li\u003E\n\u003Cli\u003E需要安装的中间件redis、nginx、kkfileview附件预览\u003C/li\u003E\n\u003Cli\u003E需申请防火墙权限和资源的中间件数据库人大金仓、minio文件存储、需要对接的系统数据中台人员组织同步等\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch3\u003E\n\u003Ca id=\"92-打包部署\" class=\"anchor\" href=\"#92-%E6%89%93%E5%8C%85%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.2 打包部署\u003C/h3\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"bash\" class=\"bash\"\u003E\u003Ccode\u003E# 打包\nmvn clean package -DskipTests\n\n# 运行\njava -jar target/xjrsoft-framework.jar\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Ch3\u003E\n\u003Ca id=\"93-docker部署\" class=\"anchor\" href=\"#93-docker%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.3 Docker部署\u003C/h3\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"yaml\" class=\"yaml\"\u003E\u003Ccode\u003E# docker-compose.yml\nversion: '3'\nservices:\n app:\n build: .\n ports:\n - \"8080:8080\"\n environment:\n - SPRING_PROFILES_ACTIVE=prod\n - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/xjrsoft\n - SPRING_REDIS_HOST=redis\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E"},{"id":"0000000000009.1 单体部署","pId":0,"name":"9.1 单体部署","parent":null,"order":12,"sort_id":14393226,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch2\u003E\n\u003Ca id=\"911-前置条件\" class=\"anchor\" href=\"#911-%E5%89%8D%E7%BD%AE%E6%9D%A1%E4%BB%B6\"\u003E\u003C/a\u003E9.1.1 前置条件\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9111-uml部署流程图\" class=\"anchor\" href=\"#9111-uml%E9%83%A8%E7%BD%B2%E6%B5%81%E7%A8%8B%E5%9B%BE\"\u003E\u003C/a\u003E9.1.1.1 UML部署流程图\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750036041620562828/db282fb6_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图1.1-1部署流程参考图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9112-服务器配置\" class=\"anchor\" href=\"#9112-%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.1.1.2 服务器配置\u003C/h3\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E服务器\u003C/th\u003E\n\u003Cth\u003E\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003EIP地址\u003C/td\u003E\n\u003Ctd\u003E10.0.252.28\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E操作系统\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E名称\u003C/td\u003E\n\u003Ctd\u003EDebian GNU/Linux\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E版本\u003C/td\u003E\n\u003Ctd\u003E10 (buster)\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E资源配置\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003ECPU核心数\u003C/td\u003E\n\u003Ctd\u003E4核\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E内存\u003C/td\u003E\n\u003Ctd\u003E8GB\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E磁盘\u003C/td\u003E\n\u003Ctd\u003E350GB未核实\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表1.2-1 部署的服务器说明表\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9113-软件依赖\" class=\"anchor\" href=\"#9113-%E8%BD%AF%E4%BB%B6%E4%BE%9D%E8%B5%96\"\u003E\u003C/a\u003E9.1.1.3 软件依赖\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cp\u003EJDK 安装及环境变量配置\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003ENginx 安装\u003C/p\u003E\n\u003Cp\u003E注本文档不再详细展开基础建设服务的部署细节(如JDK,Nginx,Mysql,Redis等),相关内容可参考组织过程资产库相关开发文档。\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9114-目录规划\" class=\"anchor\" href=\"#9114-%E7%9B%AE%E5%BD%95%E8%A7%84%E5%88%92\"\u003E\u003C/a\u003E9.1.1.4 目录规划\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cp\u003E后端部署目录新建项目目录\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E/data/wps-proxy/back/wps-proxy-back2025061304.jar\u003C/code\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E前端资源目录新建项目目录\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E/data/wps-proxy/web/dist/index.html\u003C/code\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003ENginx 配置目录(默认目录)\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E/usr/local/nginx/conf/nginx.conf\u003C/code\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch2\u003E\n\u003Ca id=\"912-后端部署\" class=\"anchor\" href=\"#912-%E5%90%8E%E7%AB%AF%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.1.2 后端部署\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9121-项目打包\" class=\"anchor\" href=\"#9121-%E9%A1%B9%E7%9B%AE%E6%89%93%E5%8C%85\"\u003E\u003C/a\u003E9.1.2.1 项目打包\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EØ使用Maven命令打包\u003Ccode\u003Emvn package\u003C/code\u003E\n\u003C/li\u003E\n\u003Cli\u003EØ或者使用Idea工具进行Maven打包如图2.1-1所示\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750044578552918667/44992716_15898786.png\" alt=\"e9dcab7fc6fcb53495d0f9afcaa07d13.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.1-1 部署打包说明图\u003C/p\u003E\n\u003Cp\u003EØ修改JAR包文件名称以项目和版本日期加版本号数为目的最终文件如图2.1-2所示\u003Ccode\u003Ewps-proxy-back2025061304.jar\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750045059734076826/bdd1ceb8_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.1-2 部署打包说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9122-上传部署包\" class=\"anchor\" href=\"#9122-%E4%B8%8A%E4%BC%A0%E9%83%A8%E7%BD%B2%E5%8C%85\"\u003E\u003C/a\u003E9.1.2.2 上传部署包\u003C/h3\u003E\n\u003Cp\u003E1、使用FTP工具(如图2.2-1和2.2-2所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750054238059854074/172b7812_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-1 上传部署包参考图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750054364517012002/545dcacf_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-2 上传部署包参考图\u003C/p\u003E\n\u003Cp\u003EØ文件已经上传到服务器将文件复制到指定文件夹即可(如下图2.2-3所示)\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecp /root/dne_back/wps-proxy-back2025061304.jar /data/wps-proxy/back/\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750054459508630328/86a12d52_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-3 上传目录参考图\u003C/p\u003E\n\u003Cp\u003EØ最终文件目录如下(如下图2.2-4所示)\u003Ccode\u003E/data/wps-proxy/back/wps-proxy-back2025061304.jar\u003C/code\u003E\n\u003Cimg src=\"https://foruda.gitee.com/images/1750054498083754416/158db6ad_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-4 上传目录参考图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9123-编写脚本并启动服务\" class=\"anchor\" href=\"#9123-%E7%BC%96%E5%86%99%E8%84%9A%E6%9C%AC%E5%B9%B6%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1\"\u003E\u003C/a\u003E9.1.2.3 编写脚本并启动服务\u003C/h3\u003E\n\u003Cp\u003E1、编写启动脚本\u003C/p\u003E\n\u003Cp\u003E可直接使用命令启动核心命令如下\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Enohup java -jar wps-proxy-back2025061304.jar --spring.profiles.active=dev \u0026gt; app.log 2\u0026gt;\u0026amp;1 \u0026amp;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E也可编写启动脚本示例\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E#!/bin/bash\n\n# 定义变量\nJAR_NAME=\"wps-proxy-back2025061304.jar\"\nPROFILE=\"dev\"\nLOG_FILE=\"app.log\"\n\n# 停止已经运行的进程\necho \"Stopping previous instance if exists...\"\npkill -f $JAR_NAME\n\n# 等待进程停止\nsleep 3\n\n# 启动应用\necho \"Starting application...\"\nnohup java -jar $JAR_NAME --spring.profiles.active=$PROFILE \u0026gt; $LOG_FILE 2\u0026gt;\u0026amp;1 \u0026amp;\n\n# 显示启动状态\nif [ $? -eq 0 ]; then\n echo \"Application started successfully!\"\n echo \"Log file: $LOG_FILE\"\n echo \"You can check logs with: tail -f $LOG_FILE\"\nelse\n echo \"Failed to start application!\"\nfi\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E2、将上述内容保存为 \u003Ccode\u003Estart.sh\u003C/code\u003E 文件\u003C/p\u003E\n\u003Cp\u003E3、给脚本添加可执行权限\u003Ccode\u003Echmod +x start.sh\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E4、运行脚本\u003Ccode\u003E./start.sh\u003C/code\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"913-前端部署\" class=\"anchor\" href=\"#913-%E5%89%8D%E7%AB%AF%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.1.3 前端部署\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9131-项目打包\" class=\"anchor\" href=\"#9131-%E9%A1%B9%E7%9B%AE%E6%89%93%E5%8C%85\"\u003E\u003C/a\u003E9.1.3.1 项目打包\u003C/h3\u003E\n\u003Cp\u003E开发人员打包成dist文件夹,如下图3.1-1所示\u003C/p\u003E\n\u003Cp\u003EØ打包命令\u003Ccode\u003Enpm run build\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750056357992837346/ae8cb1f0_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.1-1 前端打包说明图\u003C/p\u003E\n\u003Cp\u003E最终文件夹\u003Ccode\u003EE:\\Project\\yuedian\\wps-proxy\\front\\dist\\\u003C/code\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9132-上传资源\" class=\"anchor\" href=\"#9132-%E4%B8%8A%E4%BC%A0%E8%B5%84%E6%BA%90\"\u003E\u003C/a\u003E9.1.3.2 上传资源\u003C/h3\u003E\n\u003Cp\u003E1、使用FTP工具(如图3.2-1和3.2-2所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750056610086740767/cb5b269f_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-1 上传前端包说明图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750056885594089274/35d6f307_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-2 上传前端包说明图\u003C/p\u003E\n\u003Cp\u003EØ文件夹已经上传到服务器将文件夹整个复制到指定文件夹即可(如下图3.2-3所示)\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecp -r /root/dne_back/dist /data/wps-proxy/web/\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750057193285397049/f909cfca_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-3 前端包目录说明图\u003C/p\u003E\n\u003Cp\u003EØ最终文件目录如下(如下图3.2-4所示)\u003Ccode\u003E/data/wps-proxy/web/dist\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750057294206965653/dd20dca7_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-4 前端包目录说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9133-nginx配置\" class=\"anchor\" href=\"#9133-nginx%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.1.3.3 Nginx配置\u003C/h3\u003E\n\u003Cp\u003E1、配置前端页面和后端接口的反向代理\u003C/p\u003E\n\u003Cp\u003EØ输入下方命令打开Nginx的配置文件如下图3.3-1所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Evim cat /usr/local/nginx/conf/nginx.conf\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750058048724480952/9dd7d1bc_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-1 打开nginx配置文件说明图\u003C/p\u003E\n\u003Cp\u003EØ按“i”键即可进行vim文本插入\u003C/p\u003E\n\u003Cp\u003EØ在最下方的“}”符号内插入以下脚本命令如下图3.3-2所示按需修改\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E\nserver{\n listen 80;\n server_name 10.0.252.28;\n\n root /data/wps-proxy/web/dist;\n index index.html;\n\n location / {\ntry_files $uri $uri/ /index.html;\n}\n\nlocation /api/ {\nproxy_pass http://10.0.252.28:7020/;\nproxy_set_header Host $host;\nproxy_set_header X-Real-IP $remote_addr;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\n}\n}\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750057623618561246/1d304ceb_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-2 修改nginx文件说明图\u003C/p\u003E\n\u003Cp\u003EØ最后按“Esc”键再输入“:wq”即可保存。\u003C/p\u003E\n\u003Cp\u003E2、重启nginx\u003C/p\u003E\n\u003Cp\u003EØ输入下方重载Nginx命令如图所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E/usr/local/nginx/sbin/nginx -s reload \n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9134-应用配置\" class=\"anchor\" href=\"#9134-%E5%BA%94%E7%94%A8%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.1.3.4 应用配置\u003C/h3\u003E\n\u003Cp\u003EØ这里需要修改页面调用的接口地址输入以下命令编辑前端的配置文件如图3.4-1所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Evim /data/wps-proxy/web/dist/_app.config.js\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750058261357141276/63e132e2_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.4-1 前端配置文件说明图\u003C/p\u003E\n\u003Cp\u003EØ按“i”键即可进行vim文本插入\u003C/p\u003E\n\u003Cp\u003EØ将接口地址一项修改为服务器的IP和端口(Nginx代理后的地址)如图3.4-2所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E\"VITE_GLOB_API_URL\":`http://10.0.252.28:80/api`\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750057369280849322/13a5923a_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.4-2 前端接口配置说明图\u003C/p\u003E\n\u003Cp\u003EØ最后按“Esc”键再输入“:wq”即可保存。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"914-验证部署\" class=\"anchor\" href=\"#914-%E9%AA%8C%E8%AF%81%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.1.4 验证部署\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9141-后端验证\" class=\"anchor\" href=\"#9141-%E5%90%8E%E7%AB%AF%E9%AA%8C%E8%AF%81\"\u003E\u003C/a\u003E9.1.4.1 后端验证\u003C/h3\u003E\n\u003Cp\u003E1、打开接口文档如图4.1-1如下图所示代表服务启动成功这里用服务的实际地址\u003Ccode\u003Ehttp://10.0.252.28:7020/doc.html#/home\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750058720786847376/d1aa9b42_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.1-1 后端接口文档说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9142-前端验证\" class=\"anchor\" href=\"#9142-%E5%89%8D%E7%AB%AF%E9%AA%8C%E8%AF%81\"\u003E\u003C/a\u003E9.1.4.2 前端验证\u003C/h3\u003E\n\u003Cp\u003E1、打开页面首页如图4.2-1如下图所示代表配置成功Nginx的配置和dist的配置文件配置\u003Ccode\u003Ehttp://10.0.252.28/#/login\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750058907066406463/a9a26878_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.2-1 前端主页说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9143-日志检查\" class=\"anchor\" href=\"#9143-%E6%97%A5%E5%BF%97%E6%A3%80%E6%9F%A5\"\u003E\u003C/a\u003E9.1.4.3 日志检查\u003C/h3\u003E\n\u003Cp\u003E1、打开后端日志\u003C/p\u003E\n\u003Cp\u003E输入查看日志命令如下图4.3-1所示代表启动成功\u003Ccode\u003Etail -f /data/wps-proxy/back/app.log \u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750059243886969602/4c50d4ef_15898786.png\" alt=\"16b17bcb89d1d5ec869225426946ddbe.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-1 后端日志说明图\u003C/p\u003E\n\u003Cp\u003E2、打开Nginx日志\u003C/p\u003E\n\u003Cp\u003E输入查看日志命令如下图4.3-2所示最新日志没有出现报错日志即可\u003Ccode\u003Etail -f /usr/local/nginx/logs/error.log\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750059974850902184/ffda5ebd_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-2 nginx错误日志说明图\u003C/p\u003E"},{"id":"0000000000009.2 Docker部署","pId":0,"name":"9.2 Docker部署","parent":null,"order":13,"sort_id":14388998,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Cp\u003E.keep\u003C/p\u003E"},{"id":"0000000000009.3 K8S集群部署","pId":0,"name":"9.3 K8S集群部署","parent":null,"order":14,"sort_id":14389000,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Cp\u003E\u003Cstrong\u003E文档背景\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E随着云原生技术的全面落地我司基础设施已逐步向容器化与Kubernetes平台迁移。为规范生产级容器编排管理提升部署效率与系统可靠性特制定此K8s集群部署文档重点达成以下目标\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E技术架构统一化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·明确基于Kubernetes的标准化部署架构\u003C/p\u003E\n\u003Cp\u003E·定义Namespace、Deployment、Service等核心资源的配置规范\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E部署流程标准化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·从镜像构建到集群发布的完整操作链路说明\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E运维协作可视化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·声明运维团队与开发团队的职责交接点\u003C/p\u003E\n\u003Cp\u003E·提供资源申请、变更审批、故障排查的标准流程\u003C/p\u003E\n\u003Cp\u003E本次文档编制既作为集群管理的技术基准也作为跨团队云原生能力建设的指导手册后续将随K8s版本迭代持续更新。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"931-图示以及说明\" class=\"anchor\" href=\"#931-%E5%9B%BE%E7%A4%BA%E4%BB%A5%E5%8F%8A%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.3.1 图示以及说明\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9311-组织架构图\" class=\"anchor\" href=\"#9311-%E7%BB%84%E7%BB%87%E6%9E%B6%E6%9E%84%E5%9B%BE\"\u003E\u003C/a\u003E9.3.1.1 组织架构图\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298081251916106/c85b1022_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图1.1-1组织架构图参考图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9312-建设服务器说明\" class=\"anchor\" href=\"#9312-%E5%BB%BA%E8%AE%BE%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.3.1.2 建设服务器说明\u003C/h3\u003E\n\u003Cp\u003E这里准备了四台服务器搭建集群4节点如图表1.2-1所示\u003C/p\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E服务器\u003C/th\u003E\n\u003Cth\u003E服务器最低要求\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E192.168.133.137 node1作为master节点\u003C/td\u003E\n\u003Ctd\u003ECPU \u0026gt;= 2核心 / 内存\u0026gt;= 2GB / 能连接网络\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E192.168.133.138 node2\u003C/td\u003E\n\u003Ctd\u003ECPU \u0026gt;= 2核心 / 内存\u0026gt;= 2GB / 能连接网络\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E192.168.133.139 node3\u003C/td\u003E\n\u003Ctd\u003ECPU \u0026gt;= 2核心 / 内存\u0026gt;= 2GB / 能连接网络\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E192.168.133.140 node4\u003C/td\u003E\n\u003Ctd\u003ECPU \u0026gt;= 2核心 / 内存\u0026gt;= 2GB / 能连接网络\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表1.2-1 部署的服务器说明表\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298191400185254/2d9449a9_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图1.2-1 部署的服务器说明图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"932-初始配置\" class=\"anchor\" href=\"#932-%E5%88%9D%E5%A7%8B%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.3.2 初始配置\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9321-设置hosts文件所有的节点都执行\" class=\"anchor\" href=\"#9321-%E8%AE%BE%E7%BD%AEhosts%E6%96%87%E4%BB%B6%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.1 设置hosts文件所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 通过手动配置 /etc/hosts 文件,确保集群节点之间可以通过主机名直接解析 IP避免依赖 DNS 服务提高节点通信的稳定性和可靠性验证如图2.1-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令这个IP改为自己服务器的IP\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Eecho \"192.168.133.137 node1\n\n192.168.133.138 node2\n\n192.168.133.139 node3\n\n192.168.133.140 node4\" \u0026gt;\u0026gt; /etc/hosts\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ执行命令验证cat /etc/hosts\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298324063024360/b1374d86_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.1-1 修改hosts说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9322-设置hostname所有的节点都执行\" class=\"anchor\" href=\"#9322-%E8%AE%BE%E7%BD%AEhostname%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.2 设置hostname所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 为当前服务器设置永久主机名(如 node1确保Kubernetes 集群节点能正确识别自身和同伴节点身份避免因主机名冲突或未定义导致通信异常如图2.2-1所示。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令四台服务器分别使用node1/node2/node3/node4hostnamectl set-hostname node1\u003C/p\u003E\n\u003Cp\u003EØ 执行命令验证cat /etc/hostname\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298446762354062/0eb8acba_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-1 修改hostname说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9323-时间同步所有的节点都执行\" class=\"anchor\" href=\"#9323-%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.3 时间同步(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E作用 确保 Kubernetes 集群所有节点的时间保持同步避免因时间偏差导致证书失效、日志混乱、调度异常等问题如图2.3-1所示。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令启动chronyd服务systemctl start chronyd\u003C/p\u003E\n\u003Cp\u003EØ 执行命令设置systemctl enable chronyd\u003C/p\u003E\n\u003Cp\u003EØ 执行命令验证date\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298509791451404/b56f2598_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-1 同步服务器时间说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9324-设置防火墙所有的节点都执行\" class=\"anchor\" href=\"#9324-%E8%AE%BE%E7%BD%AE%E9%98%B2%E7%81%AB%E5%A2%99%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.4 设置防火墙(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E作用 关闭防火墙(如 firewalld/iptables可避免拦截 Kubernetes 集群组件间通信确保节点、Pod 及服务正常互联但生产环境建议改用精确放行规则以提升安全性如图2.4-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令停止防火墙systemctl stop firewalld\u003C/p\u003E\n\u003Cp\u003EØ执行命令开机关闭防火墙systemctl disable firewalld\u003C/p\u003E\n\u003Cp\u003EØ执行命令验证systemctl status firewalld\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298566278466263/7ff1b2fd_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-1 设置防火墙说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9325-设置selinux所有的节点都执行\" class=\"anchor\" href=\"#9325-%E8%AE%BE%E7%BD%AEselinux%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.5 设置selinux所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 将selinux 从强制模式enforcing改为禁用模式disabled避免 Kubernetes 组件因安全策略限制导致权限不足或访问被拒绝的问题简化集群部署流程如图2.5-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令设置sed -i 's/enforcing/disabled/' /etc/selinux/config\u003C/p\u003E\n\u003Cp\u003EØ执行命令验证getenforce\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298637987077717/ef68ae89_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-1 设置SElinux说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9326-设置swap分区所有的节点都执行\" class=\"anchor\" href=\"#9326-%E8%AE%BE%E7%BD%AEswap%E5%88%86%E5%8C%BA%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.6 设置swap分区所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 Kubernetes 要求节点禁用交换分区swap以确保内存管理和调度策略如 kubelet 的资源分配能够正确工作避免因swap 使用导致性能下降或不可预测的行为如图2.6-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令设置sed -i \"s/.\u003Cem\u003Eswap.\u003C/em\u003E/#\u0026amp;/\" /etc/fstab\u003C/p\u003E\n\u003Cp\u003EØ执行命令验证cat /etc/fstab\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298719405557531/c3b3e075_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.6-1 设置swap说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9327-设置网桥过滤和地址转发所有的节点都执行\" class=\"anchor\" href=\"#9327-%E8%AE%BE%E7%BD%AE%E7%BD%91%E6%A1%A5%E8%BF%87%E6%BB%A4%E5%92%8C%E5%9C%B0%E5%9D%80%E8%BD%AC%E5%8F%91%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.7 设置网桥过滤和地址转发(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E作用调整内核网络参数确保 Kubernetes 的 CNI容器网络插件如 Calico、Flannel 和 Service 网络(如 kube-proxy 的 iptables/IPVS 模式) 正常工作解决容器跨节点通信和流量转发问题如图2.7-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令设置\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /etc/sysctl.d/kubernetes.conf \u0026lt;\u0026lt; EOF\n\nnet.bridge.bridge-nf-call-ip6tables = 1\n\nnet.bridge.bridge-nf-call-iptables = 1\n\nnet.ipv4.ip_forward = 1\n\nEOF\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令执行生效sysctl --system\u003C/p\u003E\n\u003Cp\u003EØ 执行命令验证sysctlnet.bridge.bridge-nf-call-iptables net.ipv4.ip_forward\u003C/p\u003E\n\u003Cp\u003E注意如果报错系统当前缺少 bridge-nf-call-iptables 相关的内核模块支持,需要加载 br_netfilter 内核模块执行加载命令sudo modprobe br_netfilter\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298843959766873/cccdef88_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.7-1 设置网桥过滤和地址转发说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9328-设置国内yum源非必须如需则所有的节点都执行\" class=\"anchor\" href=\"#9328-%E8%AE%BE%E7%BD%AE%E5%9B%BD%E5%86%85yum%E6%BA%90%E9%9D%9E%E5%BF%85%E9%A1%BB%E5%A6%82%E9%9C%80%E5%88%99%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.8 设置国内yum源非必须如需则所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 将默认的 CentOS Yum 源替换为国内镜像(如阿里云),加速软件包下载,解决官方源访问慢或不可用的问题,确保 Kubernetes 依赖的组件(如 docker-ce、kubeadm能快速安装如图2.8-1所示。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令备份当前的yum源mv /etc/yum.repos.d /etc/yum.repos.d.backup4comex\u003C/p\u003E\n\u003Cp\u003EØ 执行命令新建空的yum源设置目录mkdir /etc/yum.repos.d\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载阿里云的yum源配置curl -o /etc/yum.repos.d/CentOS-Base.repo \u003Ca href=\"https://mirrors.aliyun.com/repo/Centos-7.repo\"\u003Ehttps://mirrors.aliyun.com/repo/Centos-7.repo\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令清除yum clean all\u003C/p\u003E\n\u003Cp\u003EØ 执行命令重建yum makecache\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298963000833485/b4aca6b6_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.8-1 设置国内yum源说明图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"933-安装docker\" class=\"anchor\" href=\"#933-%E5%AE%89%E8%A3%85docker\"\u003E\u003C/a\u003E9.3.3 安装Docker\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9331-设置国内docker源非必须如需则所有的节点都执行\" class=\"anchor\" href=\"#9331-%E8%AE%BE%E7%BD%AE%E5%9B%BD%E5%86%85docker%E6%BA%90%E9%9D%9E%E5%BF%85%E9%A1%BB%E5%A6%82%E9%9C%80%E5%88%99%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.3.1 设置国内docker源非必须如需则所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 将 Docker 官方 Yum 仓库download.docker.com替换为阿里云镜像源解决国内下载 Docker 组件(如 docker-ce、containerd.io速度慢或无法访问的问题确保容器运行时环境能快速安装如图3.1-1所示\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(配置): curl -o /etc/yum.repos.d/docker-ce.repo \u003Ca href=\"https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo\"\u003Ehttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令清除yum clean all\u003C/p\u003E\n\u003Cp\u003EØ 执行命令重建yum makecache\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750302432693786988/e081af48_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.1-1 设置国内docker源说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9332-下载docker所有的节点都执行\" class=\"anchor\" href=\"#9332-%E4%B8%8B%E8%BD%BDdocker%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.3.2 下载docker所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 Docker 作为容器运行时Container Runtime为 Kubernetes 提供底层容器管理能力(创建、运行容器),但新版 K8s 已转向更轻量的 containerd 或 CRI-O不再强制依赖 Docker如图3.2-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令下载yum install -y docker-ce-20.10.9-3.el7 docker-ce-cli-20.10.9-3.el7 containerd.io-1.6.6-3.1.el7 docker-compose-plugin-2.6.0-3.el7\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750302498627805959/ba05aed9_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-1 下载docker说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9333-设置daemonjson所有的节点都执行\" class=\"anchor\" href=\"#9333-%E8%AE%BE%E7%BD%AEdaemonjson%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.3.3 设置daemon.json所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 通过 daemon.json 配置 Docker 守护进程dockerd的核心参数包括镜像加速、存储驱动、日志选项、网络设置等以优化容器运行环境并适配 Kubernetes 需求。\u003C/p\u003E\n\u003Cp\u003EØ执行命令创建目录mkdir /etc/docker\u003C/p\u003E\n\u003Cp\u003EØ执行命令编辑文件vi /etc/docker/daemon.json\u003C/p\u003E\n\u003Cp\u003E将daemon.json内容替换至如下内容并保存如图3.3-1所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E{\n \"exec-opts\": [\n \"native.cgroupdriver=systemd\"\n ],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\",\n \"storage-opts\": [\n \"overlay2.override_kernel_check=true\"\n ]\n}\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750302724486133303/8753a727_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-1 配置daemon.json文件说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9334-启动docker所有的节点都执行\" class=\"anchor\" href=\"#9334-%E5%90%AF%E5%8A%A8docker%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.3.4 启动docker所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令启动systemctl restart docker\u003C/p\u003E\n\u003Cp\u003EØ 执行命令开机自启systemctl enable docker\u003C/p\u003E\n\u003Cp\u003EØ 执行命令验证如图3.4-1所示systemctl status docker\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750302986119269159/ac42949f_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.4-1 启动docker说明图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"934-安装kubernetes\" class=\"anchor\" href=\"#934-%E5%AE%89%E8%A3%85kubernetes\"\u003E\u003C/a\u003E9.3.4 安装Kubernetes\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9341-设置国内kubernetes源所有的节点都执行\" class=\"anchor\" href=\"#9341-%E8%AE%BE%E7%BD%AE%E5%9B%BD%E5%86%85kubernetes%E6%BA%90%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.4.1 设置国内Kubernetes源所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 将 Kubernetes 官方 Yum 仓库(\u003Ca href=\"https://packages.cloud.google.com%EF%BC%89%E6%9B%BF%E6%8D%A2%E4%B8%BA%E9%98%BF%E9%87%8C%E4%BA%91%E9%95%9C%E5%83%8F%E6%BA%90%EF%BC%8C%E8%A7%A3%E5%86%B3%E5%9B%BD%E5%86%85%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E6%88%96%E4%B8%8B%E8%BD%BD%E9%80%9F%E5%BA%A6%E6%85%A2%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%8C%E7%A1%AE%E4%BF%9Dkubeadm%E3%80%81kubelet%E3%80%81kubectl\"\u003Ehttps://packages.cloud.google.com替换为阿里云镜像源解决国内无法访问或下载速度慢的问题确保kubeadm、kubelet、kubectl\u003C/a\u003E 等组件能够快速、稳定安装如图4.1-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026lt;\u0026lt;EOF \u0026gt; /etc/yum.repos.d/kubernetes.repo\n[kubernetes]\nname=Kubernetes\nbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=0\ngpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令清除yum clean all\u003C/p\u003E\n\u003Cp\u003EØ 执行命令重建yum makecache\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750314888297212352/8fed9cec_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.1-1设置国内Kubernetes源示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9342-下载kubeadmkubelet-kubectl所有的节点都执行\" class=\"anchor\" href=\"#9342-%E4%B8%8B%E8%BD%BDkubeadmkubelet-kubectl%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.4.2 下载kubeadm/kubelet /kubectl所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令下载如图4.2-1所示 yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0\u003C/p\u003E\n\u003Cp\u003EØ 执行命令启动systemctl status kubelet\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(开机自启,非必须systemctl enable kubelet\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750314977666110382/4f698039_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.2-1安装K8S组件示意图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"935-部署kubernetes集群\" class=\"anchor\" href=\"#935-%E9%83%A8%E7%BD%B2kubernetes%E9%9B%86%E7%BE%A4\"\u003E\u003C/a\u003E9.3.5 部署Kubernetes集群\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9351-预下载镜像在master节点执行\" class=\"anchor\" href=\"#9351-%E9%A2%84%E4%B8%8B%E8%BD%BD%E9%95%9C%E5%83%8F%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.1 预下载镜像在master节点执行\u003C/h3\u003E\n\u003Cp\u003E作用预先从阿里云镜像仓库下载 Kubernetes 控制平面所需的所有容器镜像,确保 kubeadm init 初始化 master 节点时能快速顺利完成避免因网络问题导致安装失败如图5.1-1所示。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令拉取kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750315161061559421/618b5c33_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.1-1预下载镜像示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9352-初始化kubernetes在master节点执行\" class=\"anchor\" href=\"#9352-%E5%88%9D%E5%A7%8B%E5%8C%96kubernetes%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.2 初始化kubernetes在master节点执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令:\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ekubeadm init \\\n --apiserver-advertise-address=192.168.133.137 \\\n --image-repository registry.aliyuncs.com/google_containers \\\n --kubernetes-version v1.23.0 \\\n --service-cidr=10.96.0.0/12 \\\n --pod-network-cidr=10.244.0.0/16 \\\n --ignore-preflight-errors=all\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E备注\u003C/p\u003E\n\u003Cp\u003Eapiserver-advertise-address # 集群通告地址master 机器IP\u003C/p\u003E\n\u003Cp\u003Eimage-repository # 由于默认拉取镜像地址k8s.gcr.io国内无法访问这里指定阿里云镜像仓库地址\u003C/p\u003E\n\u003Cp\u003Ekubernetes-version #K8s版本与上面安装的一致\u003C/p\u003E\n\u003Cp\u003Eservice-cidr #集群内部虚拟网络Pod统一访问入口可以不用更改直接用上面的参数\u003C/p\u003E\n\u003Cp\u003Epod-network-cidr #Pod网络与下面部署的CNI网络组件yaml中保持一致可以不用更改直接用上面的参数\u003C/p\u003E\n\u003Cp\u003EØ上述命令执行完之后控制台末尾有加入集群的join命令需要复制记录下来子节点加入集群需要用到该命令如图5.2-1所示示例\u003C/p\u003E\n\u003Cp\u003Ekubeadm join 192.168.133.137:6443 --token gx38zz.iokskhaa4uehb9nr--discovery-token-ca-cert-hash sha256:5e84b16ac4c5c52da4225162b1574316797e518d26e8dd0c26a2aa6a3253038c\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750315656320689437/465ab745_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.2-1初始化K8S示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9353-设置kubectl命令行工具环境在master节点执行\" class=\"anchor\" href=\"#9353-%E8%AE%BE%E7%BD%AEkubectl%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7%E7%8E%AF%E5%A2%83%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.3 设置kubectl命令行工具环境在master节点执行\u003C/h3\u003E\n\u003Cp\u003E作用配置 kubectl 的访问权限、设置环境变量、优化命令行体验,确保能顺利使用 kubectl管理 Kubernetes 集群如图5-3.1所示)。\u003C/p\u003E\n\u003Cp\u003EØ执行命令创建目录mkdir -p $HOME/.kube\u003C/p\u003E\n\u003Cp\u003EØ 执行命令复制文件sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\u003C/p\u003E\n\u003Cp\u003EØ执行命令修改权限sudo chown $(id -u):$(id -g) $HOME/.kube/config\u003C/p\u003E\n\u003Cp\u003EØ执行命令修改环境变量vim /root/.bash_profile\u003C/p\u003E\n\u003Cp\u003E将.bash_profile内容末尾追加如下内容并保存\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E# 超级用户变量\nexport KUBECONFIG=/etc/kubernetes/admin.conf\n# 设置别名\nalias k=kubectl\n# 设置kubectl命令补齐功能\nsource \u0026lt;(kubectl completion bash)\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令环境变量生效source /root/.bash_profile\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750315829480536871/4bac21e2_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.3-1配置kubectl示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9354-设置kubernetes网络在master节点执行\" class=\"anchor\" href=\"#9354-%E8%AE%BE%E7%BD%AEkubernetes%E7%BD%91%E7%BB%9C%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.4 设置kubernetes网络在master节点执行\u003C/h3\u003E\n\u003Cp\u003E作用安装 Flannel CNI 插件为Kubernetes 集群提供 Pod 网络,使节点状态变为 Ready 并支持跨节点 Pod 通信。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令安装插件wget \u003Ca href=\"https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\"\u003Ehttps://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令修改配置vim kube-flannel.yml\u003C/p\u003E\n\u003Cp\u003E将kube-flannel.yml对应内容替换至如下内容并保存如图5.4-1所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Enet-conf.json: |\n {\n \"Network\": \"10.244.0.0/16\",\n \"Backend\"\": {\n \"Type\": \"vxlan\"\n }\n}\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316017928004449/44bd8802_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.4-1配置kube-flannel.yml文件示意图\u003C/p\u003E\n\u003Cp\u003EØ 执行命令配置生效kubectl apply -f kube-flannel.yml\u003C/p\u003E\n\u003Cp\u003EØ 执行命令查看pod状态kubectl get pod --all-namespaces\u003C/p\u003E\n\u003Cp\u003E注意全部服务必须要为Running状态才行如图5.4-2所示。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316104673410905/f9079021_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.4-2验证pod状态示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9355-子节点加入集群在所有子节点执行\" class=\"anchor\" href=\"#9355-%E5%AD%90%E8%8A%82%E7%82%B9%E5%8A%A0%E5%85%A5%E9%9B%86%E7%BE%A4%E5%9C%A8%E6%89%80%E6%9C%89%E5%AD%90%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.5 子节点加入集群(在所有子节点执行)\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令9.3.5.2步骤执行完初始化之后控制台末尾的加入集群的join命令如图5.5-1所示kubeadm join 192.168.133.137:6443 --token gx38zz.iokskhaa4uehb9nr--discovery-token-ca-cert-hash sha256:5e84b16ac4c5c52da4225162b1574316797e518d26e8dd0c26a2aa6a3253038c\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316240265279778/86dea769_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.5-1子节点加入集群示意图\u003C/p\u003E\n\u003Cp\u003E注意默认的kubeadm join Token有效期为24小时。如果子节点加入集群失败请在Master节点执行以下命令重新生成Token并在所有子节点重新加入集群指令如图5.5-2所示kubeadm token create --print-join-command\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316275543725383/984e06be_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.5-2子节点加入集群示意图\u003C/p\u003E\n\u003Cp\u003EØ 执行命令在master节点执行验证kubectl get nodes\u003C/p\u003E\n\u003Cp\u003E所有节点状态显示 Ready如图5.5-3所示表示子节点已成功加入集群部署完成\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316309760944718/b1c9c3cb_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.5-3集群节点状态验证示意图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"936-arm64架构使用二进制离线的方式安装集群\" class=\"anchor\" href=\"#936-arm64%E6%9E%B6%E6%9E%84%E4%BD%BF%E7%94%A8%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%A6%BB%E7%BA%BF%E7%9A%84%E6%96%B9%E5%BC%8F%E5%AE%89%E8%A3%85%E9%9B%86%E7%BE%A4\"\u003E\u003C/a\u003E9.3.6 ARM64架构使用二进制离线的方式安装集群\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9361-准备离线包\" class=\"anchor\" href=\"#9361-%E5%87%86%E5%A4%87%E7%A6%BB%E7%BA%BF%E5%8C%85\"\u003E\u003C/a\u003E9.3.6.1 准备离线包\u003C/h3\u003E\n\u003Cp\u003E在联网环境准备离线包(需要安装docker)或者让实施人员直接提供离线包跳过本章直接从9.3.6.2章节开始)。\u003C/p\u003E\n\u003Cp\u003E离线包文件结构如下表所示\u003C/p\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003Ek8s-offline-arm64-20250630.tar.gz\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003Escripts\u003Cbr\u003Eimages\u003Cbr\u003E------quay.io_coreos_flannel_v0.14.0-arm64.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_etcd_3.5.1-0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_kube-apiserver_v1.23.0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_kube-controller-manager_v1.23.0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_kube-proxy_v1.23.0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_kube-scheduler_v1.23.0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_pause_3.6.tar\u003Cbr\u003Econfigs\u003Cbr\u003E------daemon.json\u003Cbr\u003Ebinaries\u003Cbr\u003E------cni-plugins-linux-arm64-v1.1.1.tgz\u003Cbr\u003E------containerd-1.6.6-linux-arm64.tar.gz\u003Cbr\u003E------docker-20.10.9.tgz\u003Cbr\u003E------kubernetes-server-linux-arm64.tar.gz\u003Cbr\u003Ekube-flannel.yml\u003Cbr\u003Eimage-list.txt\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003EØ 执行命令创建离线包目录mkdir -p /root/offline-pkg/{binaries,images,scripts,configs}\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载Docker CEwget -P /root/offline-pkg/binaries \\ \u003Ca href=\"https://download.docker.com/linux/static/stable/aarch64/docker-20.10.9.tgz\"\u003Ehttps://download.docker.com/linux/static/stable/aarch64/docker-20.10.9.tgz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令设置版本变量K8S_VER=\"v1.23.0\"\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载Kubernetes组件wget -P /root/offline-pkg/binaries \\ \u003Ca href=\"https://dl.k8s.io/%24K8S_VER/kubernetes-server-linux-arm64.tar.gz\"\u003Ehttps://dl.k8s.io/$K8S_VER/kubernetes-server-linux-arm64.tar.gz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载依赖工具wget -P /root/offline-pkg/binaries \\ \u003Ca href=\"https://github.com/containerd/containerd/releases/download/v1.6.6/containerd-1.6.6-linux-arm64.tar.gz\"\u003Ehttps://github.com/containerd/containerd/releases/download/v1.6.6/containerd-1.6.6-linux-arm64.tar.gz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载CNI插件wget -P /root/offline-pkg/binaries \\ \u003Ca href=\"https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-arm64-v1.1.1.tgz\"\u003Ehttps://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-arm64-v1.1.1.tgz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003E注意TAR包也可以直接在浏览器打开直接下载下载好手动拉到指定目录/root/offline-pkg/binaries例如浏览器打开\u003Ca href=\"https://download.docker.com/linux/static/stable/aarch64/docker-20.10.9.tgz\"\u003Ehttps://download.docker.com/linux/static/stable/aarch64/docker-20.10.9.tgz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(创建镜像列表文件):\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /root/offline-pkg/image-list.txt \u0026lt;\u0026lt;EOF\nregistry.aliyuncs.com/google_containers/kube-apiserver-arm64:$K8S_VER\nregistry.aliyuncs.com/google_containers/kube-controller-manager-arm64:$K8S_VER\nregistry.aliyuncs.com/google_containers/kube-scheduler-arm64:$K8S_VER\nregistry.aliyuncs.com/google_containers/kube-proxy-arm64:$K8S_VER\nregistry.aliyuncs.com/google_containers/pause:3.6\nregistry.aliyuncs.com/google_containers/etcd:3.5.1-0\nquay.io/coreos/flannel:v0.14.0-arm64\nEOF\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令(拉取并保存镜像):\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ewhile read img; do\n docker pull $img\n save_name=$(echo $img | sed 's|/|_|g; s|:|_|g')\n docker save $img -o \"/root/offline-pkg/images/${save_name}.tar\"\ndone \u0026lt; /root/offline-pkg/image-list.txt\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令准备Docker配置文件\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /root/offline-pkg/configs/daemon.json \u0026lt;\u0026lt;EOF\n{\n \"exec-opts\": [\n \"native.cgroupdriver=systemd\"\n ],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\",\n \"storage-opts\": [\n \"overlay2.override_kernel_check=true\"\n ]\n}\nEOF\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令Flannel配置wget -O /root/offline-pkg/kube-flannel.yml \\ \u003Ca href=\"https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\"\u003Ehttps://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\"\u003Esed -i's#10.244.0.0/16#10.244.0.0/16#g' /root/offline-pkg/kube-flannel.yml\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ执行命令打包为离线文件tar -czvf k8s-offline-arm64-$(date +%Y%m%d).tar.gz -C /root/offline-pkg .\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9362-离线包分别复制到目标服务所有的节点都执行\" class=\"anchor\" href=\"#9362-%E7%A6%BB%E7%BA%BF%E5%8C%85%E5%88%86%E5%88%AB%E5%A4%8D%E5%88%B6%E5%88%B0%E7%9B%AE%E6%A0%87%E6%9C%8D%E5%8A%A1%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.2 离线包分别复制到目标服务(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751359786127490355/8da06e48_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.2-1服务器离线包文件示意图\u003C/p\u003E\n\u003Cp\u003EØ 执行命令创建目录mkdir -p /root/offline-pkg/\u003C/p\u003E\n\u003Cp\u003EØ 执行命令解压bsdtar -xzf k8s-offline-arm64-*.tar.gz -C /root/offline-pkg/\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9363-执行文档步骤9321至9327设置基础环境所有的节点都执行\" class=\"anchor\" href=\"#9363-%E6%89%A7%E8%A1%8C%E6%96%87%E6%A1%A3%E6%AD%A5%E9%AA%A49321%E8%87%B39327%E8%AE%BE%E7%BD%AE%E5%9F%BA%E7%A1%80%E7%8E%AF%E5%A2%83%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.3 执行文档步骤9.3.2.1至9.3.2.7设置基础环境(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751359875810571345/b2ff13d7_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.3-1服务器设置基础环境示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9364-安装docker所有的节点都执行\" class=\"anchor\" href=\"#9364-%E5%AE%89%E8%A3%85docker%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.4 安装docker所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令cd /root/offline-pkg\u003C/p\u003E\n\u003Cp\u003EØ 执行命令解压bsdtar -xzf docker-20.10.9.tgz -C /tmp\u003C/p\u003E\n\u003Cp\u003EØ 执行命令复制sudo cp -v /tmp/docker/* /usr/bin/\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(设置执行权限): sudo chmod 755 /usr/bin/{dockerd,docker,containerd,containerd-shim,containerd-shim-runc-v2,ctr,runc,docker-init,docker-proxy}\u003C/p\u003E\n\u003Cp\u003EØ 执行命令创建systemd服务\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /etc/systemd/system/docker.service \u0026lt;\u0026lt;EOF\n[Unit]\nDescription=Docker Application Container Engine\nAfter=network.target\n\n[Service]\nType=notify\nExecStart=/usr/bin/dockerd\nExecReload=/bin/kill -s HUP $MAINPID\nLimitNOFILE=infinity\nLimitNPROC=infinity\nTimeoutStartSec=0\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令配置Dockermkdir /etc/docker\u003C/p\u003E\n\u003Cp\u003EØ 执行命令复制Docker配置cp configs/daemon.json /etc/docker/\u003C/p\u003E\n\u003Cp\u003EØ 执行命令自启Dockersystemctl enable docker\u003C/p\u003E\n\u003Cp\u003EØ 执行命令启动Dockersystemctl start docker\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751360049253721470/f90ff21d_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.4-1离线安装docker示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9365-安装k8s所有的节点都执行\" class=\"anchor\" href=\"#9365-%E5%AE%89%E8%A3%85k8s%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.5 安装K8S所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令cd /root/offline-pkg\u003C/p\u003E\n\u003Cp\u003EØ 执行命令解压K8Star -xzf binaries/kubernetes-server-linux-arm64.tar.gz -C /usr/local\u003C/p\u003E\n\u003Cp\u003EØ 执行命令cd /usr/local/kubernetes/server/bin\u003C/p\u003E\n\u003Cp\u003EØ 执行命令复制cp kubeadm kubelet kubectl /usr/local/bin/\u003C/p\u003E\n\u003Cp\u003EØ 执行命令cd /root/offline-pkg\u003C/p\u003E\n\u003Cp\u003EØ 执行命令mkdir -p /opt/cni/bin\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(解压CNI插件)tar -xzf binaries/cni-plugins-linux-arm64-v1.1.1.tgz -C /opt/cni/bin\u003C/p\u003E\n\u003Cp\u003EØ 执行命令配置kubelet服务\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /etc/systemd/system/kubelet.service \u0026lt;\u0026lt;EOF\n[Unit]\nDescription=Kubernetes Kubelet\nAfter=docker.service\n\n[Service]\nExecStart=/usr/local/bin/kubelet \\\\\n --container-runtime=remote \\\\\n --container-runtime-endpoint=unix:///run/containerd/containerd.sock \\\\\n --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6\nRestart=always\nStartLimitInterval=0\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ执行命令启动systemctl enable kubelet\u003C/p\u003E\n\u003Cp\u003EØ执行命令加载容器镜像\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Efor img in images/*.tar; do\n docker load -i $img\ndone\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E图6.5-1加载镜像示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9366-执行文档步骤9352和9353设置主节点环境在master节点执行\" class=\"anchor\" href=\"#9366-%E6%89%A7%E8%A1%8C%E6%96%87%E6%A1%A3%E6%AD%A5%E9%AA%A49352%E5%92%8C9353%E8%AE%BE%E7%BD%AE%E4%B8%BB%E8%8A%82%E7%82%B9%E7%8E%AF%E5%A2%83%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.6 执行文档步骤9.3.5.2和9.3.5.3设置主节点环境在master节点执行\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751360256701285141/255c6f08_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.6-1设置主节点环境示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751360269379932427/1db79a48_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.6-2设置主节点环境示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9367-设置kubernetes网络在master节点执行\" class=\"anchor\" href=\"#9367-%E8%AE%BE%E7%BD%AEkubernetes%E7%BD%91%E7%BB%9C%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.7 设置kubernetes网络在master节点执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令加载kubectl apply -f /root/offline-pkg/kube-flannel.yml\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9368-执行文档步骤9355加入集群在所有子节点执行\" class=\"anchor\" href=\"#9368-%E6%89%A7%E8%A1%8C%E6%96%87%E6%A1%A3%E6%AD%A5%E9%AA%A49355%E5%8A%A0%E5%85%A5%E9%9B%86%E7%BE%A4%E5%9C%A8%E6%89%80%E6%9C%89%E5%AD%90%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.8 执行文档步骤9.3.5.5加入集群(在所有子节点执行)\u003C/h3\u003E\n\u003Ch2\u003E\n\u003Ca id=\"937-结语\" class=\"anchor\" href=\"#937-%E7%BB%93%E8%AF%AD\"\u003E\u003C/a\u003E9.3.7 结语\u003C/h2\u003E\n\u003Cp\u003E当前 Kubernetes 集群已完成标准化部署,系统将按以下机制运行:\u003C/p\u003E\n\u003Cp\u003EØ高可用保障Master 节点采用多实例部署,默认启用 kubelet 自动恢复机制\u003C/p\u003E\n\u003Cp\u003EØ网络就绪Flannel CNI 已配置 10.244.0.0/16 Pod 网段VXLAN 后端模式)\u003C/p\u003E\n\u003Cp\u003EØ证书管理kubeadm 自动生成证书有效期 1 年,到期前需执行 kubeadm certs renew\u003C/p\u003E\n\u003Cp\u003E后续运维人员可通过以下方式管理集群\u003C/p\u003E\n\u003Cp\u003EØ使用 kubectl 命令行工具或部署 Kubernetes Dashboard 进行可视化操作\u003C/p\u003E\n\u003Cp\u003EØ通过 kubeadm upgrade 进行集群版本升级(需遵循版本迭代规范)\u003C/p\u003E\n\u003Cp\u003EØ按需扩展 Node 节点join token 有效期 24h需及时更新\u003C/p\u003E\n\u003Cp\u003E如需调整网络插件、存储方案或安全策略请联系基础设施团队评估变更影响。\u003C/p\u003E"},{"id":"0000000000009.4 流水线部署","pId":0,"name":"9.4 流水线部署","parent":null,"order":15,"sort_id":14388997,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Cp\u003E\u003Cstrong\u003E文档背景\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E随着 DevOps 理念的深入实践,我司已实现开发人员提交代码后的全自动化构建部署流程。为帮助开发团队更清晰地理解 CI/CD 自动化机制,特修订此文档,重点说明:\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E职责边界明确化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·开发人员仅需关注代码提交至 Git 仓库\u003C/p\u003E\n\u003Cp\u003E·后续构建、测试、部署全流程由 Jenkins 自动完成\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E流程透明化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·详细解析从代码提交到应用上线的完整链路\u003C/p\u003E\n\u003Cp\u003E·说明各环节的触发条件、执行逻辑和预期结果\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E问题定位标准化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·提供构建失败时的关键检查点和日志分析指引\u003C/p\u003E\n\u003Cp\u003E·建立统一的异常处理流程\u003C/p\u003E\n\u003Cp\u003E本次修订旨在提升团队对自动化流水线的认知度确保开发与运维的高效协作。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"941-图示以及说明\" class=\"anchor\" href=\"#941-%E5%9B%BE%E7%A4%BA%E4%BB%A5%E5%8F%8A%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.4.1 图示以及说明\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9411-uml流程图\" class=\"anchor\" href=\"#9411-uml%E6%B5%81%E7%A8%8B%E5%9B%BE\"\u003E\u003C/a\u003E9.4.1.1 UML流程图\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749544901832427034/f490ea29_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图1.1-1 流程参考图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9412-基础建设服务说明\" class=\"anchor\" href=\"#9412-%E5%9F%BA%E7%A1%80%E5%BB%BA%E8%AE%BE%E6%9C%8D%E5%8A%A1%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.4.1.2 基础建设服务说明\u003C/h3\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E服务\u003C/th\u003E\n\u003Cth\u003EIP和端口\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003EJava\u003C/td\u003E\n\u003Ctd\u003E10.4.126.62\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E数据库金仓数据库\u003C/td\u003E\n\u003Ctd\u003E10.0.252.76:54321\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003ERedis\u003C/td\u003E\n\u003Ctd\u003E10.0.250.17:6379\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E文件服务器Minio\u003C/td\u003E\n\u003Ctd\u003E10.0.252.28:9000\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003ENacos\u003C/td\u003E\n\u003Ctd\u003E10.0.252.1:8849\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表1.2-1 部署服务说明表\u003C/p\u003E\n\u003Cp\u003E注本文档不再详细展开基础建设服务的部署细节(如Mysql,Redis,Minio等),相关内容可参考组织过程资产库相关开发文档。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"942-jenkins的搭建及初始配置\" class=\"anchor\" href=\"#942-jenkins%E7%9A%84%E6%90%AD%E5%BB%BA%E5%8F%8A%E5%88%9D%E5%A7%8B%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2 Jenkins的搭建及初始配置\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9421-jenkins服务器配置\" class=\"anchor\" href=\"#9421-jenkins%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.1 Jenkins服务器配置\u003C/h3\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E服务器\u003C/th\u003E\n\u003Cth\u003E\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003EIP地址\u003C/td\u003E\n\u003Ctd\u003E10.0.252.12\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E操作系统\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E名称\u003C/td\u003E\n\u003Ctd\u003EKylin Linux Advanced Server\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E版本\u003C/td\u003E\n\u003Ctd\u003EV10 (Halberd)\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E资源配置\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003ECPU核心数\u003C/td\u003E\n\u003Ctd\u003E32核\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E内存\u003C/td\u003E\n\u003Ctd\u003E32GB\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E磁盘\u003C/td\u003E\n\u003Ctd\u003E300GB\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表2.1-1 服务器配置说明表\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9422-下载及安装jenkins\" class=\"anchor\" href=\"#9422-%E4%B8%8B%E8%BD%BD%E5%8F%8A%E5%AE%89%E8%A3%85jenkins\"\u003E\u003C/a\u003E9.4.2.2 下载及安装Jenkins\u003C/h3\u003E\n\u003Cp\u003EØ 打开服务器界面(如图2.2-1所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545695839041637/80b22f7f_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-1服务器界面示意图\u003C/p\u003E\n\u003Cp\u003EØ 输入docker下载Jenkins命令docker基础建设这里不赘述可参考\u003Ca href=\"https://e.gitee.com/gdyditc/projects/725584/docs/2954258/file/6682560?sub_id=14389000\"\u003E9.3.3章节\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003Edocker run -p 8080:8080 -p 50000:50000 --name jenkins- -v /usr/docker/jenkins_data:/var/jenkins_home\n-d jenkins/jenkins:lts\u003C/p\u003E\n\u003Cp\u003E指令解析\u003C/p\u003E\n\u003Cp\u003E-p端口映射 左边是本地端口右边是docker容器端口 8080是Jenkins Web 界面的工作端口,50000是JNLPJava Network Launch Protocol工作端口。这个端口用于 Jenkins 节点和主控节点之间的通信。\u003C/p\u003E\n\u003Cp\u003E-v目录挂载将主机上的 /usr/docker/jenkins_data 目录挂载到容器内的\n/var/jenkins_home 目录,用于持久化 Jenkins 的数据。\u003C/p\u003E\n\u003Cp\u003EØ安装成功输入命令检查docker ps如图2.2-2所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545760923191883/b98c1893_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-2 docker安装jenkins并启动容器示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9423-初始配置\" class=\"anchor\" href=\"#9423-%E5%88%9D%E5%A7%8B%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.3 初始配置\u003C/h3\u003E\n\u003Cp\u003EØ进入Web页面,浏览器打开:\u003Ca href=\"http://10.0.252.12:8080/\"\u003Ehttp://10.0.252.12:8080/\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ按照页面提示打开初始密码文件进行复制,输入密码(如图2.3-1所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545819973260965/5916e442_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-1Jenkins打开web页面并输入初始密码示意图\u003C/p\u003E\n\u003Cp\u003EØ选择安装推荐的插件(如图2.3-2所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545850424016350/9c21ca02_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-2Jenkins安装推荐的插件示意图\u003C/p\u003E\n\u003Cp\u003EØ随后让我们创建一个管理员账户正常创建即可后续可手动创建Jenkins用户如图2.3-3所示。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545874965561062/3ec2d5a7_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-3Jenkins创建用户示意图\u003C/p\u003E\n\u003Cp\u003EØ成功进入Jenkins页面(如图2.3-4所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545896844834927/99c9d42b_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-4Jenkins进入主界面示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9424-配置插件环境\" class=\"anchor\" href=\"#9424-%E9%85%8D%E7%BD%AE%E6%8F%92%E4%BB%B6%E7%8E%AF%E5%A2%83\"\u003E\u003C/a\u003E9.4.2.4 配置插件环境\u003C/h3\u003E\n\u003Cp\u003E由于Jenkins标准安装未包含Maven项目所需的完整支持需通过以下插件实现自动化构建能力\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E核心插件清单\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E·Maven Integration\u003C/strong\u003E 提供POM解析、生命周期控制等Maven原生支持\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E·Git Plugin\u003C/strong\u003E :实现代码仓库的版本控制与触发构建\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E·JDK Tool\u003C/strong\u003E 管理Java环境隔离与版本切换\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E部署策略\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E(二选一)使用\u003Cstrong\u003E服务器级\u003C/strong\u003E插件部署(这里系统基础建设这里不赘述)如图2.4-1非Jenkins页面安装优势包括\u003C/p\u003E\n\u003Cp\u003E·统一版本管控与运维规范对齐\u003C/p\u003E\n\u003Cp\u003E·避免Jenkins重启导致的插件依赖中断\u003C/p\u003E\n\u003Cp\u003E·支持离线环境下的稳定运行\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546506523239905/9e881a24_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-1插件安装成功示意图\u003C/p\u003E\n\u003Cp\u003E(二选一)也可使用 \u003Cstrong\u003EJenkins页面\u003C/strong\u003E安装\u003C/p\u003E\n\u003Cp\u003EØ点击如图2.4-2所示系统管理\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546527546946760/9afeed28_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-2Jenkins插件管理示意图\u003C/p\u003E\n\u003Cp\u003EØ点击插件管理\u003C/p\u003E\n\u003Cp\u003EØ依次搜索并下载核心插件, 如图2.4-3所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546538567906109/f205a86c_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-3Jenkins插件安装示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E配置验证\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E需确保\u003C/p\u003E\n\u003Cp\u003E·插件已正确注册至Jenkins运行时环境\u003C/p\u003E\n\u003Cp\u003E·Jenkins全局工具配置中绑定对应二进制路径\u003C/p\u003E\n\u003Cp\u003EØ点击系统管理\u003C/p\u003E\n\u003Cp\u003EØ点击全局工具配置\u003C/p\u003E\n\u003Cp\u003EØ填写配置项maven和java以及git如图2.4-4至2.4-6所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546558645284447/f05eab1b_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-4配置Maven插件环境示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546607641027971/eac48283_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-5配置JAVA插件环境示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546626039905897/581224be_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-6配置Git插件环境示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9425-节点配置\" class=\"anchor\" href=\"#9425-%E8%8A%82%E7%82%B9%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.5 节点配置\u003C/h3\u003E\n\u003Cp\u003EØ点击系统管理如图2.5-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546729502084871/27894b90_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-1系统节点示意图\u003C/p\u003E\n\u003Cp\u003EØ点击节点和云管理\u003C/p\u003E\n\u003Cp\u003EØ点击新增节点New Node如图2.5-2所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546740447186091/be907b7a_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-2添加节点示意图\u003C/p\u003E\n\u003Cp\u003EØ依次添加集群节点信息如图2.5-3至2.5-4所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546751440052413/19f5064e_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-3系统节点配置示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546771091584697/4e9c8f53_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-4系统节点配置示意图\u003C/p\u003E\n\u003Cp\u003EØ点击保存\u003C/p\u003E\n\u003Cp\u003E最终节点列表效果如图2.5-5所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546780400417508/df2dac34_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-5系统节点列表示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9426-服务器ssh配置\" class=\"anchor\" href=\"#9426-%E6%9C%8D%E5%8A%A1%E5%99%A8ssh%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.6 服务器SSH配置\u003C/h3\u003E\n\u003Cp\u003EJenkins将通过SSH私钥的方式链接远程服务器。\u003C/p\u003E\n\u003Cp\u003EØ点击系统管理如图2.6-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546960175838930/f5893cf4_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.6-1系统配置示意图\u003C/p\u003E\n\u003Cp\u003EØ点击系统配置\u003C/p\u003E\n\u003Cp\u003E找到Publish over SSH\u003C/p\u003E\n\u003Cp\u003EØ输入Passphrase私钥key如图2.6-2所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749690398190242654/a7533448_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.6-2服务器私钥配置示意图\u003C/p\u003E\n\u003Cp\u003EØ输入Path to key私钥文件的服务器路径.ssh/id_rsa\u003C/p\u003E\n\u003Cp\u003EØ输key私钥的完整文本内容\u003C/p\u003E\n\u003Cp\u003E找到SSH Servers\u003C/p\u003E\n\u003Cp\u003EØ依次添加服务器信息如图2.6-3所示\u003C/p\u003E\n\u003Cp\u003E例如\u003C/p\u003E\n\u003Cp\u003EName: 10.0.252.12\u003C/p\u003E\n\u003Cp\u003EHostname: 10.0.252.12\u003C/p\u003E\n\u003Cp\u003EUsername: root\u003C/p\u003E\n\u003Cp\u003EØ点击保存\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750320936031608586/d8d270ed_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.6-3服务器ssh配置示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9427-凭据配置\" class=\"anchor\" href=\"#9427-%E5%87%AD%E6%8D%AE%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.7 凭据配置\u003C/h3\u003E\n\u003Cp\u003E凭据配置是Jenkins用于访问远程链接所需要的凭据。\u003C/p\u003E\n\u003Cp\u003EØ点击系统管理-凭据管理-System-全局凭据 (unrestricted)-Add Credentials如图2.7-1\u003C/p\u003E\n\u003Cp\u003EØ填写用户名-密码-描述\u003C/p\u003E\n\u003Cp\u003EØ点击保存如图2.7-2\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749690575060067596/06948efa_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.7-1添加系统凭据示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749690588745374311/9dfdab75_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.7-2系统凭据配置示意图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"943-构建自由风格任务二选一\" class=\"anchor\" href=\"#943-%E6%9E%84%E5%BB%BA%E8%87%AA%E7%94%B1%E9%A3%8E%E6%A0%BC%E4%BB%BB%E5%8A%A1%E4%BA%8C%E9%80%89%E4%B8%80\"\u003E\u003C/a\u003E9.4.3 构建自由风格任务(二选一)\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9431-新建文件夹管理\" class=\"anchor\" href=\"#9431-%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%E7%AE%A1%E7%90%86\"\u003E\u003C/a\u003E9.4.3.1 新建文件夹管理\u003C/h3\u003E\n\u003Cp\u003E该步骤是为了以项目的维度分类管理所有构建任务包括前端项目后端的项目等等,提升运维效率。\u003C/p\u003E\n\u003Cp\u003EØ点击新建任务如图3.1-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547127782960389/cfa464dc_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.1-1创建文件夹管理示意图\u003C/p\u003E\n\u003Cp\u003EØ输入任务名称智慧审计-test如图3.1-2所示\u003C/p\u003E\n\u003Cp\u003EØ类型选择文件夹\u003C/p\u003E\n\u003Cp\u003EØ点击确定\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547135818388113/c8f60c80_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.1-2创建文件夹任务示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9432-创建自由风格后端任务\" class=\"anchor\" href=\"#9432-%E5%88%9B%E5%BB%BA%E8%87%AA%E7%94%B1%E9%A3%8E%E6%A0%BC%E5%90%8E%E7%AB%AF%E4%BB%BB%E5%8A%A1\"\u003E\u003C/a\u003E9.4.3.2 创建自由风格后端任务\u003C/h3\u003E\n\u003Cp\u003EØ在新建的文件夹目录里左上角点击新建Item如图3.2-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547235559307671/df8d23f4_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-1创建后台项目示意图\u003C/p\u003E\n\u003Cp\u003EØ输入任务名称audit-back-sit如图3.2-2所示\u003C/p\u003E\n\u003Cp\u003EØ类型选择构建一个自由风格的软件项目\u003C/p\u003E\n\u003Cp\u003EØ点击确定\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547241796633457/f0351745_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-2创建后台项目示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9433-任务配置\" class=\"anchor\" href=\"#9433-%E4%BB%BB%E5%8A%A1%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.3.3 任务配置\u003C/h3\u003E\n\u003Cp\u003EØ输入项目描述如图3.3-1所示构建智慧审计后端SIT环境\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547289065017660/e7e93cd1_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-1任务描述配置示意图\u003C/p\u003E\n\u003Cp\u003EØ勾选丢弃旧的构建如图3.3-2所示\u003C/p\u003E\n\u003Cp\u003EØ填写保持构建的最大个数此项的目的是只保留构建的三个版本3\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547334025469631/e6cdfeca_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-2任务配置示意图\u003C/p\u003E\n\u003Cp\u003EØJDK选择jdk-8如图3.3-3所示\u003C/p\u003E\n\u003Cp\u003EØ勾选限制项目的运行节点作用是控制项目构建任务在指定的 Jenkins 节点Node上执行如图3.3-4所示\u003C/p\u003E\n\u003Cp\u003EØ标签表达式输入并选中agent_amd64_1\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547401560594221/7ae22df2_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-3构建配置示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547422080270900/96f781bc_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-4构建节点配置示意图\u003C/p\u003E\n\u003Cp\u003EØ源码管理选择Git如图3.3-5所示\u003C/p\u003E\n\u003Cp\u003EØ Repository URL输入代码仓库地址\u003Ca href=\"https://fcd.gdyditc.com/itc/ZHSJ/back.git\"\u003Ehttps://fcd.gdyditc.com/itc/ZHSJ/back.git\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ Credentials资格证明选择拥有该仓库权限的用户,点击“+”号可手动添加用户如yangjiewei\u003C/p\u003E\n\u003Cp\u003EØ 指定分支输入:*/dev\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547461135567847/e2248484_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-5 Git配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 触发器选择轮询SCM如图3.3-6所示\u003C/p\u003E\n\u003Cp\u003EØ 输入Cron表达式H(0-29) 12,18 * * *\u003C/p\u003E\n\u003Cp\u003E每天12:00和18:00之间的随机时间点执行(0-29分)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547481232188863/3e6d044e_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-6 触发器配置示意图\u003C/p\u003E\n\u003Cp\u003E添加构建步骤,这里总共有两个类型步骤。\u003C/p\u003E\n\u003Cp\u003EØ 步骤1点击增加构建步骤如图3.3-7所示\u003C/p\u003E\n\u003Cp\u003EØ 选择步骤类型调用顶层Maven目标\u003C/p\u003E\n\u003Cp\u003EØ 选择Maven版本maven-3.9.9如图3.3-8所示\u003C/p\u003E\n\u003Cp\u003EØ 填写目标clean install -U -Dmaven.test.skip=true\u003C/p\u003E\n\u003Cp\u003E(主要用于清理项目并安装依赖,同时跳过测试)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547506031492265/3711067c_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-7 添加maven步骤示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547516815794270/894adc32_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-8 maven步骤配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 步骤2点击增加构建步骤如图3.3-9所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547665568603391/5c9cb2fa_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-9 SSH步骤配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 选择步骤类型Send files or execute commands over SSH\u003C/p\u003E\n\u003Cp\u003EØ 选择Name10.4.126.62如图3.3-10所示\u003C/p\u003E\n\u003Cp\u003E(部署的远程服务器地址)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547680261588320/cc12db44_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-10 服务步骤配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 填写Source filestarget/audit-0.0.1-SNAPSHOT.jar\u003C/p\u003E\n\u003Cp\u003E(指定需要传输到远程服务器的本地文件路径)\u003C/p\u003E\n\u003Cp\u003EØ 填写Remove prefixtarget\u003C/p\u003E\n\u003Cp\u003E(移除指定的前缀路径)\u003C/p\u003E\n\u003Cp\u003EØ 填写Remote directory/data/apps/audit-ma-sit\u003C/p\u003E\n\u003Cp\u003E(文件传输到远程服务器的目标目录)\u003C/p\u003E\n\u003Cp\u003EØ 填写Exec command(文件传输完成后在远程服务器上执行的Shell 命令,如图3.3-11所示),命令如下:\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Emkdir -p /data/apps/audit-ma-sit\ncd /data/apps/audit-ma-sit\ncat \u0026lt;\u0026lt;\\EOF | tee deploy.sh\n#!/usr/bin/env bash\nsource /etc/profile\nDIR_PATH=\"/data/apps/audit-ma-sit\"\nSOURCE_JAR=\"audit-0.0.1-SNAPSHOT.jar\"\nTARGET_JAR=\"audit-ma-sit.jar\"\nPROJECT_ARGS=\"--spring.profiles.active=test --server.port=8080\"\nLOG_NAME=\"audit-ma-sit.log\"\nstop_process() {\n echo \"将结束 $TARGET_JAR 的进程\"\n pkill -9 -f $TARGET_JAR\n if [ $? -eq 0 ];then\n echo \"$TARGET_JAR 关闭成功\"\n else\n echo \"$TARGET_JAR 未启动\"\n fi\n}\npost_process() {\n if [ -e $TARGET_JAR ];then\n echo \"备份原包 $TARGET_JAR\"\n# mv $TARGET_JAR $TARGET_JAR$(date \"+%Y%m%d%H%M%S\")\n rm ${TARGET_JAR}.bak\n mv $TARGET_JAR ${TARGET_JAR}.bak\n fi\n mv $SOURCE_JAR $TARGET_JAR\n}\nstart_process() {\n nohup java -jar $TARGET_JAR $PROJECT_ARGS \u0026amp;\u0026gt;/dev/null \u0026amp;\n if [ $? -eq 0 ];then\n echo \"$TARGET_JAR 启动成功\"\n else\n echo \"$TAR_NAME 启动失败\"\n fi\n}\ncheckout() {\n if [ ! -e $SOURCE_JAR ];then\n echo \"没找到 $SOURCE_JAR\"\n exit\n fi\n}\ncd $DIR_PATH\ncheckout\nstop_process\npost_process\nstart_process\nEOF\nchmod +x deploy.sh\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E上述命令的执行效果如下\u003C/p\u003E\n\u003Cp\u003E·创建 /data/apps/audit-ma-sit 目录(如果不存在)。\u003C/p\u003E\n\u003Cp\u003E·生成 deploy.sh 部署脚本,实现:\u003C/p\u003E\n\u003Cp\u003E·检查新构建的 audit-0.0.1-SNAPSHOT.jar 是否存在。\u003C/p\u003E\n\u003Cp\u003E·停止当前运行的 audit-ma-sit.jar 进程。\u003C/p\u003E\n\u003Cp\u003E·备份旧jar 包(重命名为 .bak。\u003C/p\u003E\n\u003Cp\u003E·替换新jar 包并启动。\u003C/p\u003E\n\u003Cp\u003E·赋予 deploy.sh 可执行权限,方便后续直接运行。\u003C/p\u003E\n\u003Cp\u003E这样每次 Jenkins 构建完成后,只需执行 ./deploy.sh 即可完成自动化部署。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547696999030963/1be72dc5_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-11 Shell脚本配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 在该步骤下方继续点击: Add Server如图3.3-12所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547759895097547/c7c1f8a5_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-12 步骤配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 选择Name(远程服务器地址)10.4.126.62如图3.3-13所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547769637542057/68fa6a82_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-13 服务配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 填写Exec command(在远程服务器上执行的Shell 命令)\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecd /data/apps/audit-ma-sit\n./deploy.sh\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E上述命令的执行效果如下\u003C/p\u003E\n\u003Cp\u003E·进入指定目录\u003C/p\u003E\n\u003Cp\u003E·执行deploy.sh脚本命令\u003C/p\u003E\n\u003Cp\u003EØ 最后点击保存如图3.3-14所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547793032343061/5d3e0bc9_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-14 保存配置示意图\u003C/p\u003E\n\u003Cp\u003EØ可选可手动点击启动构建如图3.3-15所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547822694666792/3f45c6ee_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-15 启动构建任务示意图\u003C/p\u003E\n\u003Cp\u003EØ (可选)点击查看项目的启动日志:控制台输出如图3.3-16至3.3-17所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547843104329253/d615c11a_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-16 任务日志查看示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547853369485593/2a0a0644_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-17 任务日志查看示意图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"944-构建流水线任务二选一\" class=\"anchor\" href=\"#944-%E6%9E%84%E5%BB%BA%E6%B5%81%E6%B0%B4%E7%BA%BF%E4%BB%BB%E5%8A%A1%E4%BA%8C%E9%80%89%E4%B8%80\"\u003E\u003C/a\u003E9.4.4 构建流水线任务(二选一)\u003C/h2\u003E\n\u003Cp\u003EJenkins 流水线构建Pipeline和自由风格构建Freestyle的区别\u003C/p\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E维度\u003C/th\u003E\n\u003Cth\u003E流水线构建Pipeline\u003C/th\u003E\n\u003Cth\u003E自由风格构建Freestyle\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E配置存储位置\u003C/td\u003E\n\u003Ctd\u003EJenkinsfile存储在代码仓库如Git\u003C/td\u003E\n\u003Ctd\u003E配置保存在Jenkins服务器本地\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E灵活性\u003C/td\u003E\n\u003Ctd\u003E高支持复杂逻辑、条件判断、并行任务\u003C/td\u003E\n\u003Ctd\u003E低仅支持简单线性步骤\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E版本控制\u003C/td\u003E\n\u003Ctd\u003E与代码同仓库追溯变更历史,进行控制、审核和迭代\u003C/td\u003E\n\u003Ctd\u003E无版本控制需手动备份\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E适用场景\u003C/td\u003E\n\u003Ctd\u003E复杂CI/CD流程多环境、微服务\u003C/td\u003E\n\u003Ctd\u003E简单任务单次构建、定时执行\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表4-1 Pipeline和Freestyle区别说明表\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9441-新建文件夹管理\" class=\"anchor\" href=\"#9441-%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%E7%AE%A1%E7%90%86\"\u003E\u003C/a\u003E9.4.4.1 新建文件夹管理\u003C/h3\u003E\n\u003Cp\u003E该步骤是为了以项目的维度分类管理所有构建任务包括前端项目后端的项目等等,提升运维效率。\u003C/p\u003E\n\u003Cp\u003EØ点击新建任务如图4.1-1所示\u003C/p\u003E\n\u003Cp\u003EØ输入任务名称智慧审计-test如图4.1-2所示\u003C/p\u003E\n\u003Cp\u003EØ类型选择文件夹\u003C/p\u003E\n\u003Cp\u003EØ点击确定\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720085131882445/fa449a28_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.1-1创建文件夹管理示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720092476897756/68ced72e_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.1-2创建文件夹任务示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9442-创建流水线后端任务\" class=\"anchor\" href=\"#9442-%E5%88%9B%E5%BB%BA%E6%B5%81%E6%B0%B4%E7%BA%BF%E5%90%8E%E7%AB%AF%E4%BB%BB%E5%8A%A1\"\u003E\u003C/a\u003E9.4.4.2 创建流水线后端任务\u003C/h3\u003E\n\u003Cp\u003EØ在新建的文件夹目录里左上角点击新建Item如图4.2-1所示\u003C/p\u003E\n\u003Cp\u003EØ输入任务名称audit-back-sit如图4.2-2所示\u003C/p\u003E\n\u003Cp\u003EØ类型选择流水线\u003C/p\u003E\n\u003Cp\u003EØ点击确定\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720156882998140/3e4ee8a9_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.2-1创建后台项目示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720163428208756/d8bbaa8c_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.2-2创建后台项目示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9443-任务配置\" class=\"anchor\" href=\"#9443-%E4%BB%BB%E5%8A%A1%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.4.3 任务配置\u003C/h3\u003E\n\u003Cp\u003EØ输入项目描述如图4.3-1所示构建智慧审计后端SIT环境\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720236307593277/65e8b75f_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-1任务配置示意图\u003C/p\u003E\n\u003Cp\u003EØ勾选丢弃旧的构建如图4.3-2所示\u003C/p\u003E\n\u003Cp\u003EØ填写保持构建的最大个数此项的目的是只保留构建的三个版本3\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720260196557335/f6d6c3ee_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-2任务配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 触发器选择轮询SCM如图4.3-3所示\u003C/p\u003E\n\u003Cp\u003EØ 输入Cron表达式H(0-29) 12,18 * * *\u003C/p\u003E\n\u003Cp\u003E每天12:00和18:00之间的随机时间点执行(0-29分)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720287847347066/526de9df_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-3任务配置示意图\u003C/p\u003E\n\u003Cp\u003E流水线定义选择 Pipline script from SCM是指定一个代码仓库如Git、SVN中的脚本文件路径, 如果选择Pipline script则是直接在文本框中编写Pipeline脚本Groovy代码。这里Pipeline script from SCM 支持两种方式加载 Jenkinsfile\u003C/p\u003E\n\u003Cp\u003E1、Jenkinsfile\n与项目代码同仓库可以将Jenkinsfile放在项目的根目录如图4.3-8所示\u003C/p\u003E\n\u003Cp\u003E2、Jenkinsfile\n与项目代码不同仓库页面配置 Jenkinsfile 所在的 Git 仓库地址,并在 Jenkinsfile 内容里通过\ncheckout scm 或 git 命令拉取项目代码。这里我们选择第二种)\u003C/p\u003E\n\u003Cp\u003EØ 流水线定义选择(如图4.3-4所示)Pipline script from SCM\u003C/p\u003E\n\u003Cp\u003EØ SCM选择(如图所示)Git\u003C/p\u003E\n\u003Cp\u003EØ Repository URL输入Jenkinsfile的仓库地址需要创建对应的Jenkinsfile仓库如图4.3-5至4.3-7所示\u003Ca href=\"https://fcd.gdyditc.com/practice/jenkins-pipeline.git\"\u003Ehttps://fcd.gdyditc.com/practice/jenkins-pipeline.git\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ Credentials资格证明选择拥有该仓库权限的用户,点击“+”号可手动添加用户如18565418931\u003C/p\u003E\n\u003Cp\u003EØ 指定分支输入Jenkinsfile的仓库的分支*/dev\u003C/p\u003E\n\u003Cp\u003EØ 脚本路径Jenkinsfile的仓库内的相对路径sit/audit-back/Jenkinsfile-sit\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720442217125252/7b80f310_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-4任务配置示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720450875255129/73502f46_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-5任务配置示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720461649722615/a9d1bb02_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-6Jenkinsfile所在Git目录示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720469022940024/f8066c15_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-7Jenkinsfile所在Git目录示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750322468339883638/cf8fad95_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-8Jenkinsfile所在项目目录示意图\u003C/p\u003E\n\u003Cp\u003EØ最后点击保存如图4.3-9所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720501294726132/0835248a_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-9保存示意图\u003C/p\u003E\n\u003Cp\u003EØ可选可手动点击启动构建如图4.3-10所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720526306401432/a69db612_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-10 启动构建任务示意图\u003C/p\u003E\n\u003Cp\u003EØ (可选)点击查看项目的启动日志:控制台输出如图4.3-11至4.3-12所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720550206214136/a84804ec_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-11任务日志查看示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720556729140993/c5aef073_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-12 任务日志查看示意图\u003C/p\u003E\n\u003Cp\u003EØ至此流水线的配置已经完成接下来就是调试Jenkinsfile脚本文件。\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9444-构建脚本说明\" class=\"anchor\" href=\"#9444-%E6%9E%84%E5%BB%BA%E8%84%9A%E6%9C%AC%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.4.4.4 构建脚本说明\u003C/h3\u003E\n\u003Cp\u003E这里提供两种Jenkinsfile构建方案设计\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E一体化构建方案\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003E将所有构建流程如创建目录、生成部署脚本、检查、停止、备份、替换、赋权及执行脚本等集中编写在Jenkinsfile中实现全流程自动化管控。\u003C/p\u003E\n\u003Cp\u003EJenkinsfile脚本示例\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Epipeline {\n agent any\n \n // 环境变量定义\n environment {\n DEPLOY_DIR = \"/data/apps/audit-ma-sit\"\n SOURCE_JAR = \"audit-0.0.1-SNAPSHOT.jar\"\n TARGET_JAR = \"audit-ma-sit.jar\"\n JAVA_ARGS = \"--spring.profiles.active=test --server.port=8080\"\n DEPLOY_USER = \"deploy-user\" //目标服务器用户名\n DEPLOY_SERVER = \"10.4.126.62\" //目标服务器IP\n SSH_CREDENTIALS = \"deploy-ssh-key\" // Jenkins中配置的SSH凭据ID\n }\n \n triggers {\n pollSCM('H * * * *')\n }\n \n options {\n gitConnection('https://fcd.gdyditc.com/itc/ZHSJ/back.git')\n timeout(time: 15, unit: 'MINUTES') // 构建超时设置\n }\n\n stages {\n stage('初始化部署环境') {\n steps {\n // 本地生成部署脚本(同原逻辑)\n sh \"\"\"\n mkdir -p ${DEPLOY_DIR}\n cd ${DEPLOY_DIR}\n cat \u0026lt;\u0026lt;'EOF' \u0026gt; deploy.sh\n #!/bin/bash\n DIR_PATH=\"${DEPLOY_DIR}\"\n SOURCE_JAR=\"${SOURCE_JAR}\"\n TARGET_JAR=\"${TARGET_JAR}\"\n PROJECT_ARGS=\"${JAVA_ARGS}\"\n \n stop_process() {\n echo \"[$(date)] Stopping \\${TARGET_JAR}...\"\n pkill -9 -f \\${TARGET_JAR} || echo \"Service not running\"\n }\n post_process() {\n [ -f \\${TARGET_JAR} ] \u0026amp;\u0026amp; \\\\\n mv \\${TARGET_JAR} \\${TARGET_JAR}.bak \u0026amp;\u0026amp; \\\\\n echo \"Backup created: \\${TARGET_JAR}.bak\"\n }\n start_process() {\n nohup java -jar \\${TARGET_JAR} \\${PROJECT_ARGS} \u0026gt; console.log 2\u0026gt;\u0026amp;1 \u0026amp;\n [ \\$? -eq 0 ] \u0026amp;\u0026amp; \\\\\n echo \"Started! PID: \\$(pgrep -f \\${TARGET_JAR})\" || \\\\\n echo \"Failed!\"\n }\n cd \\${DIR_PATH}\n [ ! -f \\${SOURCE_JAR} ] \u0026amp;\u0026amp; { echo \"Error: \\${SOURCE_JAR} missing\"; exit 1; }\n stop_process\n post_process\n mv \\${SOURCE_JAR} \\${TARGET_JAR}\n start_process\n EOF\n chmod +x deploy.sh\n \"\"\"\n }\n }\n\n stage('传输部署包') {\n steps {\n // 使用SSH Agent插件安全传输\n sshagent(credentials: [SSH_CREDENTIALS]) {\n sh \"\"\"\n # 打包本地文件\n tar -czf ${TARGET_JAR}.tar.gz -C ${DEPLOY_DIR} .\n \n # 传输到目标服务器\n scp -o StrictHostKeyChecking=no \\\n ${TARGET_JAR}.tar.gz \\\n ${DEPLOY_USER}@${DEPLOY_SERVER}:/tmp/\n \n # 远程解压并执行\n ssh -o StrictHostKeyChecking=no \\\n ${DEPLOY_USER}@${DEPLOY_SERVER} \"\n mkdir -p ${DEPLOY_DIR}\n tar -xzf /tmp/${TARGET_JAR}.tar.gz -C ${DEPLOY_DIR}\n cd ${DEPLOY_DIR} \u0026amp;\u0026amp; ./deploy.sh\n rm -f /tmp/${TARGET_JAR}.tar.gz\n \"\n \"\"\"\n }\n }\n }\n }\n\n post {\n success {\n slackSend(color: 'good', \n message: \"SUCCESS: ${JOB_NAME} deployed to ${DEPLOY_SERVER}\")\n sh \"\"\"\n echo \"Deployment validated:\" \n ssh ${DEPLOY_USER}@${DEPLOY_SERVER} \\\n \\\"pgrep -f ${TARGET_JAR} \u0026amp;\u0026amp; curl -s http://localhost:8080/health\\\"\n \"\"\"\n }\n failure {\n slackSend(color: 'danger', \n message: \"FAILED: ${JOB_NAME} - Check ${BUILD_URL}\")\n }\n always {\n // 清理临时文件\n sh \"rm -f ${DEPLOY_DIR}/${TARGET_JAR}.tar.gz\"\n }\n }\n}\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E2.模块化构建方案\u003C/p\u003E\n\u003Cp\u003E将启动脚本独立拆分至项目代码库支持按服务粒度定制或参数化调用Jenkinsfile仅负责调度执行提升灵活性与可维护性。\u003C/p\u003E\n\u003Cp\u003EØ这里Jenkinsfile的脚本命令将通过远程执行命令所以Jenkins服务器需要下载相应插件下载命令sudo yum install sshpass\u003C/p\u003E\n\u003Cp\u003EJenkinsfile脚本示例\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Enode(\"agent_amd64_1\"){\n // 构建前清理工作空间\n\tstep([$class: 'WsCleanup'])\n\n\t// 1工程名服务名\n\tdef project_name='audit-back'\n\t// 2工程部署目标服务器ip自己linux机器地址\n\tdef deploy_ip='10.4.126.63'\n\t// 3工程启动端口\n\tdef port='8080'\n\t// 4环境标识\n\tdef env='dev'\n\n\n//5这里要改标识码和仓库路径\n\tstage('Checkout') {\n\t checkout([$class: 'GitSCM', branches: [[name: '*/dev']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'f0c86da7-7d54-4f77-aedf-31fe43b51fbe',url: 'https://fcd.gdyditc.com/itc/ZHSJ/back.git']]])\n\t}\n// 跳过测试打包\n\tstage('Archive Artefact') {\n \t\t sh \"mvn package -Dmaven.test.skip=true\"\n\n//6 这里要改服务器的标识码\n\twithCredentials([usernamePassword(credentialsId:'7d49d98-8e4a-4e5b-acb4-6e0bb5010e7', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){\n\t stage(\"Deploy to $env\") {\n\t\t // 清理目标服务器旧文件\n sh \"sshpass -p $PASSWORD ssh $USERNAME@$deploy_ip \\\" rm -rf /home/$USERNAME/$project_name \\\" \"\n // 本地打包\n\t\t\t sh \"mkdir $project_name\"\n sh \"cp ./target/*.jar $project_name\"\n sh \"cp ./script/startup.sh $project_name\"\n sh \"tar -cvf $project_name'.tar' $project_name \"\n\t\t\t\t // 传输并解压\n sh \"sshpass -p $PASSWORD scp $project_name*.tar $USERNAME@$deploy_ip:/home/$USERNAME/ \"\n sh \"sshpass -p $PASSWORD ssh $USERNAME@$deploy_ip \\\"cd /home/$USERNAME;tar -xvf $project_name*.tar \\\" \"\n sh \"sshpass -p $PASSWORD ssh $USERNAME@$deploy_ip \\\"cd /home/$USERNAME;rm -f $project_name*.tar \\\" \"\n // 启动服务防止Jenkins杀死进程\n\t\t\t\twithEnv(['JENKINS_NODE_COOKIE=dontKillMe']) {\n\t\t\t\t//这里调用启动脚本传入两个参数\n sh \"sshpass -p $PASSWORD ssh $USERNAME@$deploy_ip \\\"cd /home/$USERNAME/$project_name; chmod +x startup.sh;/bin/bash -l startup.sh $env $port \\\" \"\n }\n\t }\n\t}\n}\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ上述的Jenkinsfile调用了一个启动脚本startup.sh启动脚本所在的项目位置参考下图4.4-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749721579461150319/ba616128_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.4-1 startup.sh脚本所在目录示意图\u003C/p\u003E\n\u003Cp\u003Estartup.sh启动脚本示例\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E#!/usr/bin/env bash\n\nprojectName=audit-back\ntarget=$1\nport=$2\n\nhealth_url=\"http://127.0.0.1:$port/actuator/health\"\n\necho \"target = \"$target\n\npid=`ps -ef |grep 'java' |grep $projectName |grep $port |awk '{print $2}'`\nif [ -n \"$pid\" ]; then\n kill -9 $pid\n sleep 3\nfi\n\ncase $target in\n dev)\n JAVA_OPTS=\"-Xms512m -Xmx512m -Xss256k -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:SurvivorRatio=8\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:../logs/$projectName/gc.log\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/$projectName/dump\"\n JAVA_OPTS=\"$JAVA_OPTS -Dspring.profiles.active=$target -Dserver.port=$port \"\n nohup java -jar $JAVA_OPTS $projectName*.jar \u0026gt; /dev/null \u0026amp;\n ;;\n sit | tag)\n JAVA_OPTS=\"-Xms512m -Xmx512m -Xss256k -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:SurvivorRatio=8\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:../logs/$projectName/gc.log\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/$projectName/dump\"\n JAVA_OPTS=\"$JAVA_OPTS -Dspring.profiles.active=$target -Dserver.port=$port \"\n nohup java -jar $JAVA_OPTS $projectName*.jar \u0026gt; /dev/null \u0026amp;\n ;;\n uat)\n JAVA_OPTS=\"-Xms1024m -Xmx1024m -Xss256k -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:SurvivorRatio=8\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/logs/$projectName/gc.log\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=..logs/$projectName/dump\"\n JAVA_OPTS=\"$JAVA_OPTS -Dspring.profiles.active=uat -Dserver.port=$port \"\n nohup java -jar $JAVA_OPTS $projectName*.jar \u0026gt; /dev/null \u0026amp;\n ;;\n prod)\n JAVA_OPTS=\"-Xms2048m -Xmx2048m -Xss256k -Xmn256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=384m -XX:SurvivorRatio=8\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:../logs/$projectName/gc.log\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/$projectName/dump\"\n JAVA_OPTS=\"$JAVA_OPTS -Dspring.profiles.active=$target -Dserver.port=$port \"\n nohup java -jar $JAVA_OPTS $projectName*.jar \u0026gt; /dev/null \u0026amp;\n ;;\n *)\n echo \"No this ENV:$target.\"\n exit 1\n ;;\nesac\n\n\nsleep 20\nfor ((i=0;i\u0026lt;20;i++))\ndo\n curl -s ${health_url} \u0026gt; health\n state=`cat health |grep status |grep UP`\n if [ ${#state} -gt 10 ]; then\n break\n else\n echo \"Waiting for start ...\"\n sleep 5\n fi\ndone\nif [ ${#state} -gt 10 ]; then\n echo \"Deploy Success\"\n exit 0\nelse\n echo \"Deploy Fail\"\n exit 1\nfi\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E上述startup.sh启动脚本内容如下\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E基本参数设置\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003EprojectName: 项目名称,这里是 audit-back。\u003C/p\u003E\n\u003Cp\u003Etarget: 第一个参数,表示部署的目标环境(如 dev、sit、uat、prod 等)。\u003C/p\u003E\n\u003Cp\u003Eport: 第二个参数,表示项目启动的端口号。\u003C/p\u003E\n\u003Cp\u003Ehealth_url: 健康检查的 URL用于检测项目是否成功启动基于 Spring Boot Actuator 的 /health 端点)\u003C/p\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003E停止已有进程\u003C/li\u003E\n\u003Cli\u003E根据环境启动项目\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003EJVM 配置:\u003C/p\u003E\n\u003Cp\u003E堆内存-Xms512m -Xmx512m初始和最大堆内存均为 512MB。\u003C/p\u003E\n\u003Cp\u003E线程栈-Xss256k。\u003C/p\u003E\n\u003Cp\u003E年轻代-Xmn256m。\u003C/p\u003E\n\u003Cp\u003E元空间-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m。\u003C/p\u003E\n\u003Cp\u003E垃圾回收使用 CMS 收集器(-XX:+UseConcMarkSweepGC并打印 GC 日志。\u003C/p\u003E\n\u003Cp\u003EOOM 时生成堆转储文件。\u003C/p\u003E\n\u003Cp\u003ESpring 配置:\u003C/p\u003E\n\u003Cp\u003E激活指定的 Profile-Dspring.profiles.active=$target。\u003C/p\u003E\n\u003Cp\u003E设置服务端口-Dserver.port=$port。\u003C/p\u003E\n\u003Cp\u003E通过 nohup 后台启动项目,并将日志输出到 /dev/null丢弃日志\u003C/p\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E健康检查\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003E等待 20 秒后,开始检查健康状态。\u003C/p\u003E\n\u003Cp\u003E循环最多 20 次,每次间隔 5 秒,通过 curl 访问 health_url。\u003C/p\u003E\n\u003Cp\u003E如果响应中包含 UP 状态,则认为启动成功,退出循环。\u003C/p\u003E\n\u003Col start=\"5\"\u003E\n\u003Cli\u003E结果判断。\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003Estartup.sh启动脚本功能总结\u003C/p\u003E\n\u003Cp\u003E停止旧进程确保端口和项目无冲突。\u003C/p\u003E\n\u003Cp\u003E动态配置根据环境dev/sit/uat/prod调整 JVM 参数。\u003C/p\u003E\n\u003Cp\u003E启动项目后台运行 Java 服务。\u003C/p\u003E\n\u003Cp\u003E健康检查通过 Actuator 接口验证服务是否就绪。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"945-结语\" class=\"anchor\" href=\"#945-%E7%BB%93%E8%AF%AD\"\u003E\u003C/a\u003E9.4.5 结语\u003C/h2\u003E\n\u003Cp\u003E当前 Jenkins 自动化部署流水线已完成全链 路配置,系统将按以下机制运行:\u003C/p\u003E\n\u003Cp\u003EØ 定时构建:每日通过 Poll SCM 自动轮询代码仓库变更配置频率H(0-29) 12,18 * * *\u003C/p\u003E\n\u003Cp\u003EØ 事件触发:支持 Git Webhook 实时触发代码更新部署\u003C/p\u003E\n\u003Cp\u003EØ 版本追溯:每次构建关联 Git Commit ID 与制品版本\u003C/p\u003E\n\u003Cp\u003E后续开发人员可基于此环境\u003C/p\u003E\n\u003Cp\u003EØ 按需创建微服务/前后端构建任务\u003C/p\u003E\n\u003Cp\u003EØ 参考本文档的权限管理及流水线设计规范\u003C/p\u003E\n\u003Cp\u003E如需扩展部署场景或调整流程请联系 DevOps 团队协同优化。\u003C/p\u003E"},{"id":"00000000000010. 常见问题","pId":0,"name":"10. 常见问题","parent":null,"order":16,"sort_id":13882351,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch3\u003E\n\u003Ca id=\"101-权限问题\" class=\"anchor\" href=\"#101-%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98\"\u003E\u003C/a\u003E10.1 权限问题\u003C/h3\u003E\n\u003Cp\u003EQ: 如何配置接口权限?\nA: 在Controller方法上添加@SaCheckPermission注解\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"102-数据源问题\" class=\"anchor\" href=\"#102-%E6%95%B0%E6%8D%AE%E6%BA%90%E9%97%AE%E9%A2%98\"\u003E\u003C/a\u003E10.2 数据源问题\u003C/h3\u003E\n\u003Cp\u003EQ: 如何配置多数据源?\nA: 在application.yml中配置多数据源,并在Service上使用@DS注解\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"103-缓存问题\" class=\"anchor\" href=\"#103-%E7%BC%93%E5%AD%98%E9%97%AE%E9%A2%98\"\u003E\u003C/a\u003E10.3 缓存问题\u003C/h3\u003E\n\u003Cp\u003EQ: 如何使用Redis缓存?\nA: 使用@Cacheable注解或RedisTemplate\u003C/p\u003E"},{"id":"00000000000011. 常见业务场景开发示例","pId":0,"name":"11. 常见业务场景开发示例","parent":null,"order":17,"sort_id":13882352,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Cp\u003E.keep\u003C/p\u003E"},{"id":"00000000000012. 更新日志","pId":0,"name":"12. 更新日志","parent":null,"order":18,"sort_id":13882356,"extname":".md","isParent":false,"isHidden":false,"content":"\u003Ch3\u003E\n\u003Ca id=\"v201-2024-03-31\" class=\"anchor\" href=\"#v201-2024-03-31\"\u003E\u003C/a\u003Ev2.0.1 (2024-03-31)\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E新增ChatGPT集成\u003C/li\u003E\n\u003Cli\u003E优化代码生成器\u003C/li\u003E\n\u003Cli\u003E修复已知问题\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"v200-2024-02-26\" class=\"anchor\" href=\"#v200-2024-02-26\"\u003E\u003C/a\u003Ev2.0.0 (2024-02-26)\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E升级Spring Boot到2.7.5\u003C/li\u003E\n\u003Cli\u003E升级MyBatis-Plus到3.5.1\u003C/li\u003E\n\u003Cli\u003E新增工作流引擎\u003C/li\u003E\n\u003C/ul\u003E"}],"content":{"13822801":"\u003Ch2\u003E\n\u003Ca id=\"11-文档修订记录\" class=\"anchor\" href=\"#11-%E6%96%87%E6%A1%A3%E4%BF%AE%E8%AE%A2%E8%AE%B0%E5%BD%95\"\u003E\u003C/a\u003E1.1 文档修订记录\u003C/h2\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E修订次数\u003C/th\u003E\n\u003Cth\u003E文档版本号\u003C/th\u003E\n\u003Cth\u003E修订时间\u003C/th\u003E\n\u003Cth\u003E修订人\u003C/th\u003E\n\u003Cth\u003E修订内容\u003C/th\u003E\n\u003Cth\u003E审核人\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E1\u003C/td\u003E\n\u003Ctd\u003EV1.0\u003C/td\u003E\n\u003Ctd\u003E2025.4\u003C/td\u003E\n\u003Ctd\u003E姚煜楠\u003C/td\u003E\n\u003Ctd\u003E初始版本内容编写。\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Ch2\u003E\n\u003Ca id=\"12-框架概述\" class=\"anchor\" href=\"#12-%E6%A1%86%E6%9E%B6%E6%A6%82%E8%BF%B0\"\u003E\u003C/a\u003E1.2 框架概述\u003C/h2\u003E\n\u003Cp\u003E全代码开发平台是集团技术中台的重要组成部分在主流JAVA技术开发基础上整合了优质的第三方开源项目并基于集团常见业务场景进行适配优化最终研制而成的快速应用开发平台。其定位为通用代码开发脚手架为快速开发上线低代码开发平台无法满足的定制化系统进行赋能。全开平台提供了一个开箱即用的开发环境包含了集团完整的技术生态和技术规范以统一应用开发的技术路线让系统开发者基于技术底座专注于业务实现。平台内置多个应用开发所必须的公共组件各组件以服务或依赖包的方式引入项目包括项目脚手架工程、用户登录组件、权限控制组件、用户管理组件、ORM组件、代码生成器组件、附件上传组件、流程组件等。\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"121-技术栈\" class=\"anchor\" href=\"#121-%E6%8A%80%E6%9C%AF%E6%A0%88\"\u003E\u003C/a\u003E1.2.1 技术栈\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cstrong\u003EJDK版本\u003C/strong\u003E: 8以上\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E基础框架\u003C/strong\u003E: Spring Boot 2.7.5、Spring Cloud\u0026amp;Alibaba 2021.0.5\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E前端框架\u003C/strong\u003E: Vue 3.3.4、Ant-Design-Vue 3.0\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E持久层\u003C/strong\u003E: MyBatis-Plus 3.5.2、Druid 1.2.22\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E权限框架\u003C/strong\u003E: Sa-Token 1.29.0\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E数据库\u003C/strong\u003E: 支持人大金仓默认、MySQL、Oracle、PostgreSQL等\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E缓存\u003C/strong\u003E: Redis\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E文档\u003C/strong\u003E: Knife4j 2.0.7\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E工具库\u003C/strong\u003E: Hutool 5.8.20\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"122-主要特性\" class=\"anchor\" href=\"#122-%E4%B8%BB%E8%A6%81%E7%89%B9%E6%80%A7\"\u003E\u003C/a\u003E1.2.2 主要特性\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E前后端分离架构\u003C/strong\u003E前端基于最新的Vue3 + Ant Design Vue后端基于 Spring Boot前后端核心技术均为主流技术。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E开箱即用\u003C/strong\u003E无需进行复杂的二次集成。平台具备自动生成代码、接口管理、基于 RBAC 改进模型权限控制、数据大屏、Camunda 工作流、打印模板、在线接口、Xss 防跨站攻击等功能并集成了集团组织架构同步、短信邮件平台、待办推送、CAS单点登录等功能。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E在线自定义接口设计\u003C/strong\u003E用户只需要针对业务数据进行处理即可在线生成接口后端无需重新编译实现“接口热插拔”可供内外部进行调用具备高扩展性、高移植性、高兼容性等特点。同时平台提供大量接口相关功能并提供大量接口示例方便用户进行接口使用及系统集成。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E统一授权、认证\u003C/strong\u003E平台使用“Sa-Token”实现统一安全认证中心并支持与集团统一认证的CAS单点登录、与EIP门户和移动办公对接的互信机制。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E灵活的权限控制\u003C/strong\u003E平台的权限控制基于RBAC改进模型可通过组织架构信息针对“功能”、“接口”、“数据”进行精细化管理满足用户实施面向企业安全策略的需要。同时平台已实现集团三级管控模式的数据权限机制方便实现平台单位对下属单位的数据管控需求。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E移动端支持\u003C/strong\u003E平台支持以H5的方式集成到移动办公中。同时根据需求的不同平台提供了数据展示页设计和功能页设计两种移动端界面生成方式生成基础的移动端页面集成了移动端业务的增删查改和流程审批功能。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E代码生成器\u003C/strong\u003E平台基于“Mybatis-plus-generator”提供代码生成器功能用户可通过可视化配置生成“Web 端”、“移动端”、“后端”代码,然后根据自身业务需要进行代码调整。生成的代码提供了基本的增删查改功能和流程审批集成,极大提高了代码开发效率。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E零代码开发\u003C/strong\u003E平台提供自定义表单功能根据平台提供的“组件池”用户通过简单的拖拽及配置则可以完成功能的设计和发布设计完成的功能无需生成代码直接嵌入系统实现功能“热插拔”。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E工作流引擎\u003C/strong\u003E平台集成了符合BPMN设计规范的轻量级工作流引擎“Camunda”功能更强大架构更稳定。同时针对中国式工作流进行了深度的二次研发提供了“表单发起流程”、“电子签章”、“流程委托”、“流程版本变更”、“流程传阅”等符合中国国情的工作流功能并且重新设计了流程模板绘制页面用户只需进行简单的拖拉拽和配置即可完成复杂的流程设计。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003EBI设计\u003C/strong\u003E平台除了支持帆软大屏的集成还提供了一个简单的BI引擎桌面设计集成了百度 Echarts、地图等插件内置了表格、统计指标等用户常用组件用户可以通过0代码的方式设计并实现BI大屏页面同时发布成菜单供系统用户进行查看平台管理员可以通过功能授权对用户进行权限控制。针对复杂的大屏驾驶舱需求平台集成了goView组件提供了更加强大和丰富的BI大屏设计组件并支持vue代码级的修改。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E报表功能\u003C/strong\u003E除了支持帆软报表的集成平台提供UReport报表开发和vue-plugin-hiprint打印组件基于单元格迭代方式可快速开发出各种类型复杂中式报表同时可通过图形化配置实现“标准化”、“动态化”的打印模板通过将模板中的相关组件绑定接口数据可以实现传入不同数据显示不同的报表结果最终完成“报表套打”、“格式规范”、“需要跟业务数据进行关联”的报表开发打印。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E多租户数据隔离\u003C/strong\u003E平台通过mybatis的tenant机制实现“字段级别”的数据隔离即保证数据隔离的安全也可实现跨租户的数据交流。管理员可以在平台的“租户管理”中进行租户授权和功能授权租户之间共用组织架构、功能代码但存在数据隔离。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E信创数据库支持\u003C/strong\u003E平台可支持“人大金仓”、“达梦”、“高斯”等国产数据库也兼容“MySQL”、“Oracle”、“PostgreSQL“等。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E文件存储\u003C/strong\u003E集成minio文件存储管理组件和kkFileView文件预览组件。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E定时任务\u003C/strong\u003E集成power-job定时任务可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E消息服务\u003C/strong\u003E集成了集团的短信和邮件服务。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E安全功能\u003C/strong\u003E完善的xss防御、sql注入防御、黑白名单、接口限流、接口鉴权等。\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch2\u003E\n\u003Ca id=\"13-快速上手\" class=\"anchor\" href=\"#13-%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B\"\u003E\u003C/a\u003E1.3 快速上手\u003C/h2\u003E\n\u003Col\u003E\n\u003Cli\u003E阅读《快速开发指南》明白整体开发流程\u003C/li\u003E\n\u003Cli\u003E拉取空项目代码修改数据库/redis等配置启动项目程序\u003C/li\u003E\n\u003Cli\u003E按照对应的前端/后端/移动端/大屏开发指南完成业务需求开发\u003C/li\u003E\n\u003Cli\u003E查阅《常见业务场景开发示例》快速完成常见业务需求的开发\u003C/li\u003E\n\u003Cli\u003E查阅《外部组件集成》与其他系统或服务进行对接集成\u003C/li\u003E\n\u003Cli\u003E按照《部署指南》完成项目部署和上线\u003C/li\u003E\n\u003Cli\u003E查阅《常见问题》快速定位常见问题原因和解决办法\u003C/li\u003E\n\u003Cli\u003E查阅《核心功能设计和使用》了解框架底层设计思路排查难度大的问题\u003C/li\u003E\n\u003Cli\u003E查阅《更新日志》获取框架升级信息\u003C/li\u003E\n\u003C/ol\u003E","13882309":"\u003Ch3\u003E\n\u003Ca id=\"21-环境要求\" class=\"anchor\" href=\"#21-%E7%8E%AF%E5%A2%83%E8%A6%81%E6%B1%82\"\u003E\u003C/a\u003E2.1 环境要求\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EJDK 8+\u003C/li\u003E\n\u003Cli\u003EMaven 3.6+\u003C/li\u003E\n\u003Cli\u003EMySQL 5.7+\u003C/li\u003E\n\u003Cli\u003ERedis 5.0+\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"22-项目配置\" class=\"anchor\" href=\"#22-%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E2.2 项目配置\u003C/h3\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"yaml\" class=\"yaml\"\u003E\u003Ccode\u003E# application.yml\nserver:\n port: 8080\n\nspring:\n datasource:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/xjrsoft?useUnicode=true\u0026amp;characterEncoding=utf8\u0026amp;serverTimezone=Asia/Shanghai\n username: root\n password: root\n \n redis:\n host: localhost\n port: 6379\n database: 0\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Ch3\u003E\n\u003Ca id=\"23-启动项目\" class=\"anchor\" href=\"#23-%E5%90%AF%E5%8A%A8%E9%A1%B9%E7%9B%AE\"\u003E\u003C/a\u003E2.3 启动项目\u003C/h3\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"bash\" class=\"bash\"\u003E\u003Ccode\u003Emvn spring-boot:run\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E","13882320":"\u003Ch3\u003E\n\u003Ca id=\"31-权限管理\" class=\"anchor\" href=\"#31-%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86\"\u003E\u003C/a\u003E3.1 权限管理\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E基于Sa-Token的权限控制\u003C/li\u003E\n\u003Cli\u003E支持多角色\u003C/li\u003E\n\u003Cli\u003E支持数据权限\u003C/li\u003E\n\u003Cli\u003E支持接口权限\u003C/li\u003E\n\u003Cli\u003E支持菜单权限\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"32-数据访问\" class=\"anchor\" href=\"#32-%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE\"\u003E\u003C/a\u003E3.2 数据访问\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EMyBatis-Plus增强\u003C/li\u003E\n\u003Cli\u003E多数据源支持\u003C/li\u003E\n\u003Cli\u003E动态SQL\u003C/li\u003E\n\u003Cli\u003E分页查询\u003C/li\u003E\n\u003Cli\u003E逻辑删除\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"33-代码生成\" class=\"anchor\" href=\"#33-%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90\"\u003E\u003C/a\u003E3.3 代码生成\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E支持多种数据库\u003C/li\u003E\n\u003Cli\u003E自定义模板\u003C/li\u003E\n\u003Cli\u003E前后端代码生成\u003C/li\u003E\n\u003Cli\u003E表单配置生成\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"34-工作流\" class=\"anchor\" href=\"#34-%E5%B7%A5%E4%BD%9C%E6%B5%81\"\u003E\u003C/a\u003E3.4 工作流\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E基于Camunda的工作流引擎\u003C/li\u003E\n\u003Cli\u003E流程设计器\u003C/li\u003E\n\u003Cli\u003E流程部署\u003C/li\u003E\n\u003Cli\u003E任务管理\u003C/li\u003E\n\u003Cli\u003E流程监控\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"35-报表功能\" class=\"anchor\" href=\"#35-%E6%8A%A5%E8%A1%A8%E5%8A%9F%E8%83%BD\"\u003E\u003C/a\u003E3.5 报表功能\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E基于UReport的报表系统\u003C/li\u003E\n\u003Cli\u003E报表设计器\u003C/li\u003E\n\u003Cli\u003E数据源配置\u003C/li\u003E\n\u003Cli\u003E报表预览\u003C/li\u003E\n\u003Cli\u003E报表导出\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"36-文件存储\" class=\"anchor\" href=\"#36-%E6%96%87%E4%BB%B6%E5%AD%98%E5%82%A8\"\u003E\u003C/a\u003E3.6 文件存储\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E支持多种云存储\n\u003Cul\u003E\n\u003Cli\u003E七牛云\u003C/li\u003E\n\u003Cli\u003E阿里云OSS\u003C/li\u003E\n\u003Cli\u003E腾讯云COS\u003C/li\u003E\n\u003Cli\u003E华为云OBS\u003C/li\u003E\n\u003Cli\u003EMinIO\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E文件上传下载\u003C/li\u003E\n\u003Cli\u003E文件预览\u003C/li\u003E\n\u003Cli\u003E文件管理\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"37-消息服务\" class=\"anchor\" href=\"#37-%E6%B6%88%E6%81%AF%E6%9C%8D%E5%8A%A1\"\u003E\u003C/a\u003E3.7 消息服务\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E短信服务\u003C/li\u003E\n\u003Cli\u003E邮件服务\u003C/li\u003E\n\u003Cli\u003E企业微信\u003C/li\u003E\n\u003Cli\u003E钉钉集成\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"38-定时任务\" class=\"anchor\" href=\"#38-%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1\"\u003E\u003C/a\u003E3.8 定时任务\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E基于Power-Job的分布式任务调度\u003C/li\u003E\n\u003Cli\u003E任务管理\u003C/li\u003E\n\u003Cli\u003E任务监控\u003C/li\u003E\n\u003Cli\u003E任务日志\u003C/li\u003E\n\u003C/ul\u003E","13882341":"\u003Ch3\u003E\n\u003Ca id=\"41-项目结构\" class=\"anchor\" href=\"#41-%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84\"\u003E\u003C/a\u003E4.1 项目结构\u003C/h3\u003E\n\u003Cp\u003Esrc/main/java/com/xjrsoft/\u003C/p\u003E\n\u003Cp\u003E├── common/ # 公共模块\u003C/p\u003E\n\u003Cp\u003E├── config/ # 配置类\u003C/p\u003E\n\u003Cp\u003E├── module/ # 业务模块\u003C/p\u003E\n\u003Cp\u003E│ ├── authority/ # 权限模块\u003C/p\u003E\n\u003Cp\u003E│ ├── system/ # 系统模块\u003C/p\u003E\n\u003Cp\u003E│ ├── workflow/ # 工作流\u003C/p\u003E\n\u003Cp\u003E│ ├── form/ # 表单模块\u003C/p\u003E\n\u003Cp\u003E│ └── ...\u003C/p\u003E\n\u003Cp\u003E└── ITCApplication.java\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"42-开发规范\" class=\"anchor\" href=\"#42-%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83\"\u003E\u003C/a\u003E4.2 开发规范\u003C/h3\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003E代码规范\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E遵循阿里巴巴Java开发手册\u003C/li\u003E\n\u003Cli\u003E使用Lombok简化代码\u003C/li\u003E\n\u003Cli\u003E统一异常处理\u003C/li\u003E\n\u003Cli\u003E统一返回格式\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E命名规范\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E类名: 大驼峰命名\u003C/li\u003E\n\u003Cli\u003E方法名: 小驼峰命名\u003C/li\u003E\n\u003Cli\u003E变量名: 小驼峰命名\u003C/li\u003E\n\u003Cli\u003E常量名: 全大写下划线分隔\u003C/li\u003E\n\u003Cli\u003E包名: 全小写点分隔\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E注释规范\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E类注释: 说明类的用途\u003C/li\u003E\n\u003Cli\u003E方法注释: 说明方法的功能、参数、返回值\u003C/li\u003E\n\u003Cli\u003E关键代码注释: 说明复杂逻辑\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch3\u003E\n\u003Ca id=\"43-开发流程\" class=\"anchor\" href=\"#43-%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B\"\u003E\u003C/a\u003E4.3 开发流程\u003C/h3\u003E\n\u003Col\u003E\n\u003Cli\u003E创建数据库表\u003C/li\u003E\n\u003Cli\u003E使用代码生成器生成基础代码\u003C/li\u003E\n\u003Cli\u003E修改生成的代码\u003C/li\u003E\n\u003Cli\u003E编写业务逻辑\u003C/li\u003E\n\u003Cli\u003E编写单元测试\u003C/li\u003E\n\u003Cli\u003E提交代码\u003C/li\u003E\n\u003C/ol\u003E","14231109":"\u003Ch2\u003E\n\u003Ca id=\"411单体版说明\" class=\"anchor\" href=\"#411%E5%8D%95%E4%BD%93%E7%89%88%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E4.1.1单体版说明\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"框架定位\" class=\"anchor\" href=\"#%E6%A1%86%E6%9E%B6%E5%AE%9A%E4%BD%8D\"\u003E\u003C/a\u003E框架定位\u003C/h3\u003E\n\u003Cp\u003E全代码开发平台以下简称“平台”是基于 \u003Cstrong\u003ESpring Boot 2.7.5 + Vue 3\u003C/strong\u003E 的\u003Cstrong\u003E单体架构\u003C/strong\u003E快速开发框架整合了集团技术中台的核心能力提供开箱即用的开发环境适用于\u003Cstrong\u003E定制化业务系统\u003C/strong\u003E开发。\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E核心目标\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E降低开发门槛\u003C/strong\u003E :提供标准化技术栈,减少环境搭建和基础组件开发成本。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E提升开发效率\u003C/strong\u003E :内置代码生成器、零代码表单、工作流引擎等工具,支持快速业务开发。\u003C/li\u003E\n\u003Cli\u003E\n\u003Cstrong\u003E保障技术合规\u003C/strong\u003E :遵循集团技术规范,集成安全、权限、信创数据库等企业级能力。\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"技术架构图-\" class=\"anchor\" href=\"#%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84%E5%9B%BE-\"\u003E\u003C/a\u003E\u003Cstrong\u003E技术架构图\u003C/strong\u003E \u003Cimg src=\"https://foruda.gitee.com/images/1747214519828804736/ff0a505a_5089312.png\" alt=\"技术架构图.png\"\u003E\n\u003C/h3\u003E\n\u003Ch3\u003E\n\u003Ca id=\"本地开发流程\" class=\"anchor\" href=\"#%E6%9C%AC%E5%9C%B0%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B\"\u003E\u003C/a\u003E\u003Cstrong\u003E本地开发流程\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E如下图单体版所有代码都在本地前后端分离后端代码都在一个程序内所以开发调试都是在本地相对简单。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747212342688998492/0ade0625_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"412初始化步骤\" class=\"anchor\" href=\"#412%E5%88%9D%E5%A7%8B%E5%8C%96%E6%AD%A5%E9%AA%A4\"\u003E\u003C/a\u003E4.1.2初始化步骤\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"数据库初始化\" class=\"anchor\" href=\"#%E6%95%B0%E6%8D%AE%E5%BA%93%E5%88%9D%E5%A7%8B%E5%8C%96\"\u003E\u003C/a\u003E\u003Cstrong\u003E数据库初始化\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E数据库初始化见项目的script/mysql全库.sql或人大金仓全库脚本.sql\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"后端配置\" class=\"anchor\" href=\"#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E\u003Cstrong\u003E后端配置\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E创建配置文件application-local.yml用来做本地开发的配置\u003C/p\u003E\n\u003Cp\u003E在application.yml配置文件中添加spring.profiles.active=local启用该新增的配置文件。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747211515541039837/08f58227_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E在新增的配置文件中通过增加数据库链接、redis链接、单点回调地址、前端路由地址、生成代码路径等配置项\u003C/p\u003E\n\u003Cp\u003E用自己的配置覆盖application.yml中的默认配置项。\u003C/p\u003E\n\u003Cp\u003E注其他环境的配置文件也通过这种方式进行管理。\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"启动后端\" class=\"anchor\" href=\"#%E5%90%AF%E5%8A%A8%E5%90%8E%E7%AB%AF\"\u003E\u003C/a\u003E\u003Cstrong\u003E启动后端\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E直接运行Application文件即可启动后端项目。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747211650228285733/e76aeb9a_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"启动前端\" class=\"anchor\" href=\"#%E5%90%AF%E5%8A%A8%E5%89%8D%E7%AB%AF\"\u003E\u003C/a\u003E\u003Cstrong\u003E启动前端\u003C/strong\u003E\n\u003C/h3\u003E\n\u003Cp\u003E\u003Cstrong\u003E前端运行前配置\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E修改.env文件配置前端项目端口号VITE_PORT=3100自定义\u003C/p\u003E\n\u003Cp\u003E修改.env.development文件修改后端服务地址VITE_GLOB_API_URL=\u003Ca href=\"http://127.0.0.1:8080/\"\u003Ehttp://127.0.0.1:8080/\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747216321038197144/218ddcf2_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E前端运行\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E安装依赖cd front npm install或pnpm install\u003C/p\u003E\n\u003Cp\u003E运行npm run serve即可启动前端项目\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747211927367914726/9f5258f4_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"413开发示例\" class=\"anchor\" href=\"#413%E5%BC%80%E5%8F%91%E7%A4%BA%E4%BE%8B\"\u003E\u003C/a\u003E4.1.3开发示例\u003C/h2\u003E\n\u003Cp\u003E以下会演示创建一个带流程的测试表单以供参考\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003E打开前端首页输入用户名密码进行登录\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747278951106814397/d4b1ae65_5089312.png\" alt=\"LoginPage.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E创建数据表\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747290298249541744/c7b5922d_5089312.png\" alt=\"workOrderPage.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E点击左侧菜单在线开发-\u0026gt;代码生成\n\u003Cstrong\u003E功能说明\u003C/strong\u003E\n界面优先不需要事先准备表先进行拖拉拽出界面下一步后会自动根据表单生成表字段进行编辑\n数据优先(较常用):需要事先准备表,拖拉拽的每个组件需要和表字段进行关联\n简易模版可以拖拉拽出不需要数据表的的功能\n快速生成代码根据所选的表根据表字段自动生成表单\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747279792556773154/02f67012_5089312.png\" alt=\"CodeCreate.jpg\"\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E注\u003C/strong\u003E需根据实际业务需求进行代码生成这里仅演示数据优先\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E填写基本信息\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747291191926379723/769fb2df_5089312.png\" alt=\"基本信息.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E拖拉拽表单\u003C/p\u003E\n\u003Cp\u003E需要从左侧组件框里找到合适的组件类型拖入表单区域然后选中组件后设置其右侧的属性绑定表、字段等属性\n响应式(推荐开启):开启后能够根据不同的屏幕尺寸、设备类型或容器大小自动调整其布局、样式或功能,以提供最佳的用户体验\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747291002358251764/9b509243_5089312.png\" alt=\"表单设计.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E表单事件\u003C/p\u003E\n\u003Cp\u003E在此处可以添加自定义API、JS脚本到表单节点比如表单加载前后、提交表单前后\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E界面设计\u003C/p\u003E\n\u003Cp\u003E查询配置定义列表页的查询项\n列表配置定义列表页的列属性、配置左侧的树配置、调整列的不同属性比如对齐方式、自适应宽度、列头筛选等\n按钮设置定义列表上的按钮以及自定义按钮需要注意如果开启流程需要勾选发起审批\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747291905932415985/ef482927_5089312.png\" alt=\"发起审批按钮.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E代码预览\u003C/p\u003E\n\u003Cp\u003E此步可以查看生成出来的代码\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E菜单设置\u003C/p\u003E\n\u003Cp\u003E设置业务菜单信息可以将生成的代码打包下载成独立文件后续可以导入也可以直接将代码文件生成到项目中\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747292141189438827/73aabd22_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E生成代码与拷贝\u003C/p\u003E\n\u003Cp\u003E前端代码会生成到配置文件application.yml中的 xjrsoft.generate.webPath=xxxxx 配置下示例配置的路径是C:\\Users\\ITC\\Desktop\\codeGenerate\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747295445541338395/494509b7_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E后端由于选择了直接生成到项目中后端文件会生成到src/main/java/com/xjrsoft/module/下\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747295518660126439/7ed5f589_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E拷贝代码到项目将生成的文件C:\\Users\\ITC\\Desktop\\codeGenerate\\src目录下的api和views拷贝到项目的src对应的目录下\n\u003Cimg src=\"https://foruda.gitee.com/images/1747292560563037360/0362eeaf_5089312.png\" alt=\"image.png\"\u003E\napi目录统一存放所有API请求定义避免接口URL散落在各个组件中便于维护\nviews目录统一存放了页面组件实现业务界面和用户交互\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E注可以在api和views下添加自己的业务代码\u003C/strong\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E重启项目\u003C/p\u003E\n\u003Cp\u003E重启项目后刷新页面即可看到新增的菜单和功能\n注此时表单还没有进行流程配置还需要配置流程\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747292873407380427/89ea4b69_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E新增流程设计\u003C/p\u003E\n\u003Cp\u003E点击菜单 工作流程-\u0026gt;流程设计 点击新增流程按钮\n1、从左侧拖入需要的用户节点、网关、结束节点等\n2、填写右侧流程属性信息选择默认表单为之前创建的工单\n3、选择某个节点设置节点审批人\n4、选择关联功能tab-\u0026gt;勾选是否启用按钮-\u0026gt;选择功能表单-\u0026gt;流程已添加表单-\u0026gt;勾选工单点击确认-\u0026gt;最后选择更新表单按钮-\u0026gt;保存模版\n注后续表单有字段调整也需要在此处更新表单并保存\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747293468659062907/22cfb1e1_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E新增表单完成\u003C/p\u003E\n\u003Cp\u003E刷新页面再次进入刚才新增的菜单可以看到表单已经关联流程\n至此新增带流程表单就完成了\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747293620315907556/502a0f8d_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E","14231112":"\u003Ch2\u003E\n\u003Ca id=\"421微服务版说明\" class=\"anchor\" href=\"#421%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%89%88%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E4.2.1微服务版说明\u003C/h2\u003E\n\u003Cp\u003E微服务版本后端是共用一套基础服务开发人员在本地运行自己的业务服务连入集中的开发环境进行功能开发。\u003C/p\u003E\n\u003Cp\u003E前端是只有一个前端项目不做拆分本地运行整个前端项目开发人员在上面添加自己的业务前端代码连接共用的后端开发环境。\u003C/p\u003E\n\u003Cp\u003E如下图微服务版前端和业务服务后端的代码在本地后端公共服务是部署在远程本地接入远程的公共服务环境再连回本地业务服务相对复杂。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747212440221630322/86c493a8_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E开发时生成的业务代码需要开发人员访问共用的开发环境的base服务把代码拉下来与本地的业务代码比对后合并到本地代码中再提交到代码仓库。后期会添加把生成的业务代码打包下载的功能。\u003C/p\u003E\n\u003Cp\u003E因此前端部分的部署运行方式同4.1章节的单体版本只是把后端地址改成共用的开发环境的gateway服务的地址。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"422微服务版配置\" class=\"anchor\" href=\"#422%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%89%88%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E4.2.2微服务版配置\u003C/h2\u003E\n\u003Cp\u003E微服务应用的配置主要是使用SpringBoot和Nacos的配置方式。\u003C/p\u003E\n\u003Cp\u003ESpringBoot的bootstrap.yml配置了微服务应用的名称和端口以及要接入的Nacos的注册和配置中心的地址、命名空间、分组还有其他本地开发相关的或不能放置到Nacos的配置项。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"423本地开发\" class=\"anchor\" href=\"#423%E6%9C%AC%E5%9C%B0%E5%BC%80%E5%8F%91\"\u003E\u003C/a\u003E4.2.3本地开发\u003C/h2\u003E\n\u003Col\u003E\n\u003Cli\u003E在bootstrap.yml中给业务服务确定端口号和服务名。\u003C/li\u003E\n\u003Cli\u003E修改spring.cloud.nacos的注册和配置中心为共用开发环境中的nacos地址、命名空间和分组。\u003C/li\u003E\n\u003Cli\u003E启动服务。\u003C/li\u003E\n\u003Cli\u003E如果业务服务需要使用自己的数据库是在共用开发环境的多数据源中进行配置使用的。\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003E\u003Cstrong\u003E本地开发业务服务接入远程公共服务\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003E本地启动整个前端应用例如local-front连接的后端设置为远程公共服务的gateway服务\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E本地启动要开发的业务服务例如local-business-service配置接入nacos的注册中心\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E修改gateway服务路由的配置spring.cloud.gateway.routes添加自己业务的资源路径路由到的本地服务的定义例如\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747213070211462278/60c209b2_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E就是将前端应用/ast_asset/**路径的请求直接路由到本地开发的业务服务asset-service-yyn即可将本地前后端应用对应运行起来进行开发。\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E注意\u003C/strong\u003E由于gateway的路由机制是从前往后匹配匹配到即直接路由\u003Cstrong\u003E因此业务服务的路由需要放置在最后一个通用路由规则之前\u003C/strong\u003E防止被路由到base服务去。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747213264038062471/3decb966_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch2\u003E\n\u003Ca id=\"424开发示例\" class=\"anchor\" href=\"#424%E5%BC%80%E5%8F%91%E7%A4%BA%E4%BE%8B\"\u003E\u003C/a\u003E4.2.4开发示例\u003C/h2\u003E\n\u003Cp\u003E以下演示微服务版带流程的测试表单以供参考\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003Enacos上确定所有服务都已启动\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747304223815212287/9942d5d3_5089312.png\" alt=\"服务列表.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E配置并启动前端\n前端的.env文件的VITE_GLOB_API_URL指向远程公共服务的gateway服务ip:port\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747304636838449768/a9a6478a_5089312.png\" alt=\"前端接口配置.jpg\"\u003E\n启动前端输入用户名密码进行登录\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747304872595993981/a862ea0f_5089312.png\" alt=\"微服务登录页.jpg\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E创建并启动业务服务\u003C/p\u003E\n\u003Cp\u003E创建启动业务服务后配置中接入nacos配置中心\n配置cloud.nacos.config.server-addr=nacos配置中心地址\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747360157527309132/bb08e4f1_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003Enacos添加业务资源路径\n在nacos的配置中心找到对应的gateway配置编辑spring.cloud.gateway.routes增加自己的业务资源路径发布更新即可\n注意需要将新增的配置放到最后一个通用路由规则之前因为gateway匹配机制是从前向后的\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747361981411700632/e8a888f4_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E准备业务数据表与新增代码生成\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E创建数据表\n\u003Cimg src=\"https://foruda.gitee.com/images/1747290298249541744/c7b5922d_5089312.png\" alt=\"workOrderPage.jpg\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E点击左侧菜单在线开发-\u0026gt;代码生成\n\u003Cstrong\u003E功能说明\u003C/strong\u003E\n界面优先不需要事先准备表先进行拖拉拽出界面下一步后会自动根据表单生成表字段进行编辑\n数据优先(较常用):需要事先准备表,拖拉拽的每个组件需要和表字段进行关联\n简易模版可以拖拉拽出不需要数据表的的功能\n快速生成代码根据所选的表根据表字段自动生成表单\n\u003Cimg src=\"https://foruda.gitee.com/images/1747279792556773154/02f67012_5089312.png\" alt=\"CodeCreate.jpg\"\u003E\n\u003Cstrong\u003E注\u003C/strong\u003E需根据实际业务需求进行代码生成这里仅演示数据优先\u003C/li\u003E\n\u003Cli\u003E填写基本信息\n\u003Cimg src=\"https://foruda.gitee.com/images/1747361659412198664/9541fe62_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E拖拉拽表单\n需要从左侧组件框里找到合适的组件类型拖入表单区域然后选中组件后设置其右侧的属性绑定表、字段等属性\n响应式(推荐开启):开启后能够根据不同的屏幕尺寸、设备类型或容器大小自动调整其布局、样式或功能,以提供最佳的用户体验\n\u003Cimg src=\"https://foruda.gitee.com/images/1747361734016395152/8cb24133_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E表单事件\n在此处可以添加自定义API、JS脚本到表单节点比如表单加载前后、提交表单前后\u003C/li\u003E\n\u003Cli\u003E界面设计\n查询配置定义列表页的查询项\n列表配置定义列表页的列属性、配置左侧的树配置、调整列的不同属性比如对齐方式、自适应宽度、列头筛选等\n按钮设置定义列表上的按钮以及自定义按钮需要注意如果开启流程需要勾选发起审批\n\u003Cimg src=\"https://foruda.gitee.com/images/1747291905932415985/ef482927_5089312.png\" alt=\"发起审批按钮.jpg\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E代码预览\n此步可以查看生成出来的代码\u003C/li\u003E\n\u003Cli\u003E菜单设置\n设置业务菜单信息可以将生成的代码打包下载成独立文件后续可以复制到项目\n\u003Cimg src=\"https://foruda.gitee.com/images/1747379051391602809/6b82b6a0_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E生成代码与拷贝\u003C/p\u003E\n\u003Cp\u003E注基础服务是公用的所以代码生成都要用打包下载做例子包括前端的\n所以这里选择打包下载会直接将前后端代码打包成压缩包自动下载\n\u003Cimg src=\"https://foruda.gitee.com/images/1747380201827995442/214128b3_5089312.png\" alt=\"image.png\"\u003E\n解压包结构如下back后端项目代码front前端项目代码\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747379818721970308/37296236_5089312.png\" alt=\"image.png\"\u003E\n只需要将其复制到对应前后端项目中即可\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747379980642231518/ceb581fe_5089312.png\" alt=\"image.png\"\u003E\n\u003Cimg src=\"https://foruda.gitee.com/images/1747380250209430654/288e1939_5089312.png\" alt=\"image.png\"\u003E\napi目录统一存放所有API请求定义避免接口URL散落在各个组件中便于维护\nviews目录统一存放了页面组件实现业务界面和用户交互\n\u003Cstrong\u003E注可以在api和views下添加自己的业务代码\u003C/strong\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E重启项目\u003C/p\u003E\n\u003Cp\u003E重启项目后刷新页面即可看到新增的菜单和功能\n注此时表单还没有进行流程配置还需要配置流程\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747362039900525494/d32fab70_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E新增流程设计\u003C/p\u003E\n\u003Cp\u003E点击菜单 工作流程-\u0026gt;流程设计 点击新增流程按钮\n1、从左侧拖入需要的用户节点、网关、结束节点等\n2、填写右侧流程属性信息选择默认表单为之前创建的工单\n3、选择某个节点设置节点审批人\n4、选择关联功能tab-\u0026gt;勾选是否启用按钮-\u0026gt;选择功能表单-\u0026gt;流程已添加表单-\u0026gt;勾选工单点击确认-\u0026gt;最后选择更新表单按钮-\u0026gt;保存模版\n注后续表单有字段调整也需要在此处更新表单并保存\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747293468659062907/22cfb1e1_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E新增表单完成\u003C/p\u003E\n\u003Cp\u003E刷新页面再次进入刚才新增的菜单可以看到表单已经关联流程\n至此新增带流程表单就完成了\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747293620315907556/502a0f8d_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch2\u003E\n\u003Ca id=\"425跨服务调用\" class=\"anchor\" href=\"#425%E8%B7%A8%E6%9C%8D%E5%8A%A1%E8%B0%83%E7%94%A8\"\u003E\u003C/a\u003E4.2.5跨服务调用\u003C/h2\u003E\n\u003Cp\u003E注跨服务调用如 workorder-service 调用 user-service 或其他服务)使用 FeignClient\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E假设user-service服务提供getInfoByUserName接口\n\u003Cimg src=\"https://foruda.gitee.com/images/1747383195213235308/279ba8cd_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003Cli\u003E在workorder-service中定义FeignClient客户端接口\n\u003Cimg src=\"https://foruda.gitee.com/images/1747382747855204636/7a5438a3_5089312.png\" alt=\"image.png\"\u003E\nvalue指定目标服务名必须与注册中心一致\npath指定该服务的统一API前缀\n@GetMapping与目标服务的接口定义一致\u003C/li\u003E\n\u003Cli\u003E在workorder-service的业务代码中调用\n\u003Cimg src=\"https://foruda.gitee.com/images/1747383026389748116/46f0c427_5089312.png\" alt=\"image.png\"\u003E\n\u003C/li\u003E\n\u003C/ul\u003E","14231114":"\u003Ch2\u003E\n\u003Ca id=\"431-开启多租户模式\" class=\"anchor\" href=\"#431-%E5%BC%80%E5%90%AF%E5%A4%9A%E7%A7%9F%E6%88%B7%E6%A8%A1%E5%BC%8F\"\u003E\u003C/a\u003E\u003Cstrong\u003E4.3.1 开启多租户模式\u003C/strong\u003E\n\u003C/h2\u003E\n\u003Cp\u003E全开框架默认是单租户模式如果需要开启多租户模式需要修改前端代码和后端代码的配置文件。\u003C/p\u003E\n\u003Cp\u003E1后端配置修改\n在项目 spring boot 配置文件中加上以下配置:\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"properties\" class=\"properties\"\u003E\u003Ccode\u003Exjrsoft:\n tenant:\n enabled: true #是否启用多租户\n admin-tenant-code: system #管理员租户编码\n tenant-field: tenant_id #多租户 区分字段enantCode\n default-tenant-code: system\n is-use-default-tenant: true\n hidden-sub-menu-ids:\n - 1419273699655498176\n - 1700041673784094722\n ignore-table: #忽略多租户的表\n - xjr_app_func_design\n - xjr_app_menu\n - xjr_app_page_design\n - xjr_area\n - xjr_code_schema\n - xjr_databaselink\n - xjr_language\n - xjr_language_type\n - xjr_liteflow_chain\n - xjr_liteflow_script\n - xjr_menu\n - xjr_menu_button\n - xjr_menu_column\n - xjr_menu_form\n - xjr_report\n - xjr_report_relation\n - xjr_subsystem\n - xjr_tenant\n - xjr_tenant_authorize\n - xjr_app_menu_button\n - xjr_app_menu_column\n - xjr_app_menu_form\n - xjr_app_authorize\n - xjr_user\n - xjr_department\n - xjr_user_dept_relation\n - xjr_authorize\n - DEPT_TREE\n - MENU_TREE\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E2前段配置修改\n在环境变量配置文件中加上变量 VITE_TENANT_ENABLED=true,如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747133990335423262/415d8da2_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E3给数据库表加上租户字段。\n除了以上步骤1中配置了租户忽略的表ignore-tabl:配置中列出的表))之外,其它数据表都加上 tenant_id 字段\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E加租户字段语句示例ALTER TABLE xxx ADD tenant_id int8 NULL;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Ch2\u003E\n\u003Ca id=\"432-新建租户站点\" class=\"anchor\" href=\"#432-%E6%96%B0%E5%BB%BA%E7%A7%9F%E6%88%B7%E7%AB%99%E7%82%B9\"\u003E\u003C/a\u003E4.3.2 新建租户(站点)\u003C/h2\u003E\n\u003Cp\u003E1.使用系统管理员账号账号admin租户码system登录系统。\u003C/p\u003E\n\u003Cp\u003E2.找到“系统管理---租户管理\"模块,点击新增租户,填写唯一的租户名称和租户编码以及其它信息,如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747134803351893104/ba694640_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E3.点击功能授权,按需授予租户系统菜单的访问权限,如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747135091508522365/8e97e58f_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"433-配置站点管理员和员工角色\" class=\"anchor\" href=\"#433-%E9%85%8D%E7%BD%AE%E7%AB%99%E7%82%B9%E7%AE%A1%E7%90%86%E5%91%98%E5%92%8C%E5%91%98%E5%B7%A5%E8%A7%92%E8%89%B2\"\u003E\u003C/a\u003E4.3.3 配置站点管理员和员工角色\u003C/h2\u003E\n\u003Cp\u003E1.使用系统管理员账号 admin以目标站点的租户身份登录系统如下图所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747135965151101830/21c90183_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2.进入到角色管理模块,创建一个站点管理员角色和至少一个用户,将用户添加为站点管理员角色、如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747136140659120132/5d28a082_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E3.打开功能授权、接口授权,将菜单、按钮、列表和接口的所有权限授予站点管理员,使其拥有对站点的最高级别管理权限,如下图所示:\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747136279698675277/227d428c_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E4.新建一个员工角色,按需授予其基本功能菜单权限。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"434-表单个性化配置\" class=\"anchor\" href=\"#434-%E8%A1%A8%E5%8D%95%E4%B8%AA%E6%80%A7%E5%8C%96%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E4.3.4 表单个性化配置\u003C/h2\u003E\n\u003Cp\u003E假设场景租户 B 需要用到某张表单 form01而该表单已经存在 A 租户下,并且已经生成了代码。\u003C/p\u003E\n\u003Cp\u003E1.可以通过以下步骤完成表单 form01 在租户 B 下的配置:\u003C/p\u003E\n\u003Cp\u003E(1).将 xjr_form_template 表中的 id 字段的主键属性去掉;给 tenant_id 字段设置默认值为 1创建联合主键(id,tenant_id)。\u003C/p\u003E\n\u003Cp\u003Esql 语句参考如下:\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E去掉id字段的主键属性\nALTER TABLE xjr_form_template DROP CONSTRAINT \"xxxx\"; ---xxxx请改成具体的主键名称\n给tenant_id字段设置默认值\nALTER TABLE xjr_form_template ALTER COLUMN tenant_id SET DEFAULT 1;\n创建联合主键的语句\nALTER TABLE xjr_form_template ADD CONSTRAINT xjr_form_template_pk PRIMARY KEY (id,tenant_id);\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E(2).将表单 form01 对应的表单数据拷贝一份xjr_form_template 表)为 insert 语句;保持 id 字段的值不变,将 tenant_id 字段修改为租户 B 的租户 id执行 insert 语句。\n如图所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747138096698058921/3bbc3771_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2.使用管理员账号 admin 以租户 B 的身份登录系统,在“表单设计”模块的“完整配置--\u0026gt; 渲染覆盖配置”中,可以根据租户需求,对表单详情页字段的名称和显隐、列表页展示字段、列表查询栏进行个性化配置。\u003C/p\u003E\n\u003Cp\u003E配置方式直接拷贝表单代码的 config.ts 文件中的配置粘贴到“渲染覆盖配置“一栏即可。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747138515604406197/4471df92_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747138630494079227/fbf11c05_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E3.将需要进行个性化配置的表单的前端代码./components/config.ts路径中的配置useCustomConfig改成true.\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750919818808105264/f93146a1_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E配置示例\n现在用A租户的站点管理员账号登录系统尝试对表单form01做以下配置\n1搜索栏配置成只保留姓名。\n2列表栏展示姓名、性别、年龄并且姓名字段改成显示成“名字”占用500px宽度。\n3表单详情页配置成显示姓名、性别不显示年龄并且将性别字段改成显示成英文“gender”\u003C/p\u003E\n\u003Cp\u003E配置修改如下\n\u003Cimg src=\"https://foruda.gitee.com/images/1747220797689092581/bc7e5d1f_9136487.png\" alt=\"image.png\"\u003E\n\u003Cimg src=\"https://foruda.gitee.com/images/1747220741746668744/729e685a_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E效果如下\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747220989301927222/a352f613_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747221007996399259/e4ba926a_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E其它租户的表单个性化配置可以通过同样的方式实现可以用目标租户的站点管理员账号登录后进行配置也可以用系统管理员admin以目标租户身份登录进行配置。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"435-流程设计\" class=\"anchor\" href=\"#435-%E6%B5%81%E7%A8%8B%E8%AE%BE%E8%AE%A1\"\u003E\u003C/a\u003E4.3.5 流程设计\u003C/h2\u003E\n\u003Cp\u003E配置方式使用系统管理员admin以目标租户的身份登录系统进入到“流程定义”模块按照常规流程定义步骤完成该租户下指定表单的流程定义。\u003C/p\u003E\n\u003Cp\u003E示例\n1以A租户的身份登录系统进行流程设计\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747218380857062414/65344e21_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E发起审批效果如下\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747219434072141869/0a217f71_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2以B租户的身份登录系统进行流程设计\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747218586903338916/35f09db4_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E发起审批效果如下\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747219248236210313/90be173d_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"436-代码逻辑差异化\" class=\"anchor\" href=\"#436-%E4%BB%A3%E7%A0%81%E9%80%BB%E8%BE%91%E5%B7%AE%E5%BC%82%E5%8C%96\"\u003E\u003C/a\u003E4.3.6 代码逻辑差异化\u003C/h2\u003E\n\u003Cp\u003E如果是业务代码层面的差异不能通过表单自定义配置覆盖的情况需将差异的代码修改为接口中执行不同租户通过配置不同的接口事件触发从而执行差异化的业务代码逻辑。\u003C/p\u003E\n\u003Cp\u003E可供使用的接口配置有流程回调事件配置、表单事件配置组件触发事件配置。\u003C/p\u003E\n\u003Cp\u003E1.流程回调事件配置:如图所示,可以在流程设计页面中,在流程审批过程中的各个环节配置事件以执行个性化的业务逻辑。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1748326679916683718/bb128c96_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2.表单事件配置如下图示例在初始化表单阶段配置一个事件节点调用api记录用户查看表单的事件。\u003Cimg src=\"https://foruda.gitee.com/images/1748316825985563648/8fbd2b22_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Col start=\"3\"\u003E\n\u003Cli\u003E组件触发事件配置如下图示例给姓名字段配上blur事件在失去焦点时如果值不是男、女则默认赋值为“男”\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1748318936169970097/e2e43bf1_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"437-跨租户审批\" class=\"anchor\" href=\"#437-%E8%B7%A8%E7%A7%9F%E6%88%B7%E5%AE%A1%E6%89%B9\"\u003E\u003C/a\u003E4.3.7 跨租户审批\u003C/h2\u003E\n\u003Cp\u003E打开跨租户的待办页面时因为一个页面中包含很多个请求只有第一个主请求有业务id的能查询数据所属租户从而切换其他逻辑到另一个租户中处理才能正确返回跨租户的数据\u003C/p\u003E\n\u003Cp\u003E但是页面后续的其他请求例如枚举、触发事件之类的也需要同步传所属租户id才能正确返回跨租户的数据但是组件数量太多修改的工作量很大。\u003C/p\u003E\n\u003Cp\u003E因此使用另一种切租户的方案\u003C/p\u003E\n\u003Cp\u003E待办列表返回有其他租户的数据打开时如果单据不是当前租户的话界面上提示用户需要切换租户后才能打开是否切换是则自动切租户再跳转需要的待办否则取消打开单据。\u003C/p\u003E\n\u003Cp\u003E功能图示\n1.点击待办列表中的待审批流程,如果流程是从其它租户发起,则会弹出切换租户确定框。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747961936228427514/458b22db_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2.切换完租户,页面右上角会弹出切换租户成功通知,用户可以继续完成审批操作。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1747962064380499873/9f628f5b_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch1\u003E\n\u003Ca id=\"438-以某个租户的身份执行数据库查询\" class=\"anchor\" href=\"#438-%E4%BB%A5%E6%9F%90%E4%B8%AA%E7%A7%9F%E6%88%B7%E7%9A%84%E8%BA%AB%E4%BB%BD%E6%89%A7%E8%A1%8C%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9F%A5%E8%AF%A2\"\u003E\u003C/a\u003E4.3.8 以某个租户的身份执行数据库查询。\u003C/h1\u003E\n\u003Cp\u003E如果想临时以某个租户的身份执行一些数据库查询可以通过以下方式实现\u003C/p\u003E\n\u003Cp\u003Etry {\nTenantUtil.doInTenant(1000000); --注意该语句必须放在try{}代码块的第一行以确保TenantUtil.doInTenant(tenantId)和TenantUtil.doInTenant()能同时得到执行\n----代码块在此代码块中的数据库查询将会以id为1000000的租户的身份进行\n}finally{\nTenantUtil.doInTenant();\n}\u003C/p\u003E\n\u003Ch1\u003E\n\u003Ca id=\"439系统数据迁移功能\" class=\"anchor\" href=\"#439%E7%B3%BB%E7%BB%9F%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB%E5%8A%9F%E8%83%BD\"\u003E\u003C/a\u003E4.3.9系统数据迁移功能\u003C/h1\u003E\n\u003Cp\u003E系统数据迁移功能可以用于跨环境数据迁移和跨租户数据复制。\u003C/p\u003E\n\u003Cp\u003E1.相关概念说明:\u003C/p\u003E\n\u003Cp\u003E跨环境数据迁移简称数据迁移指的是将数据从A环境迁移到B环境常见于将数据从测试环境迁移到生产环境或者从生产环境迁移到测试环境。\u003C/p\u003E\n\u003Cp\u003E跨租户数据复制:简称数据复制,指的是新建租户时,可以将现有租户的基础数据复制到新租户,以简化新租户的数据初始化过程。\u003C/p\u003E\n\u003Cp\u003E2.功能讲解\u003C/p\u003E\n\u003Cp\u003E1导出工作区在导出工作区选择需要导出的项目然后点击“导出所选项目”完成对数据的导出。\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E说明无论是数据迁移还是数据复制导出步骤是一样的\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750921399816086964/dfaef3ea_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E2导入工作区需要进行数据迁移时请选择“覆盖模式导入”需要数据复制时请选择“租户模式导入”。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750921377230929590/0616a8fe_9136487.png\" alt=\"image.png\"\u003E\u003C/p\u003E","13882342":"\u003Cp\u003E.keep\u003C/p\u003E","13882343":"\u003Cp\u003E.keep\u003C/p\u003E","13882344":"\u003Cp\u003E.keep\u003C/p\u003E","13882347":"\u003Ch1\u003E\n\u003Ca id=\"wps集成\" class=\"anchor\" href=\"#wps%E9%9B%86%E6%88%90\"\u003E\u003C/a\u003Ewps集成\u003C/h1\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750239753302395729/17b3817e_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E金山文档在线预览编辑服务提供了文件预览、文件编辑服务\u003C/p\u003E\n\u003Cp\u003E框架中实现了wps所需要的回调接口由文档中台直接回调业务系统中的接口获取文件元数据、保存新文件、获取用户信息、通知等接口\u003C/p\u003E\n\u003Cp\u003E流程\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E文档打开时会从后端获取文件在线编辑链接\u003C/li\u003E\n\u003Cli\u003E前端向文档中台发起加载文件、权限等信息请求\u003C/li\u003E\n\u003Cli\u003E文档中台向后端回调文件元数据、下载文件接口后端返回文件元数据、文件数据\u003C/li\u003E\n\u003Cli\u003E文档中台向前端返回文件、权限等信息\u003C/li\u003E\n\u003Cli\u003E前端根据文件、权限、水印渲染文件内容\u003C/li\u003E\n\u003Cli\u003E保存文件编辑后会向中台发送文件保存新版本请求文档中台回调后台上传文件新版本接口后端返回保存结果后中台返回保存结果\u003C/li\u003E\n\u003Cli\u003E通知用户加入或退出协作请求获取用户信息回调接口请求通知回调接口通知对接方此文件目前有哪些人在协作\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch2\u003E\n\u003Ca id=\"直连模式\" class=\"anchor\" href=\"#%E7%9B%B4%E8%BF%9E%E6%A8%A1%E5%BC%8F\"\u003E\u003C/a\u003E直连模式\u003C/h2\u003E\n\u003Cp\u003E直连模式是业务系统不经由其他系统直接对接文档中台\u003C/p\u003E\n\u003Cp\u003E注需要在文档中台系统上配置回调接口地址为业务系统地址\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"启用和配置\" class=\"anchor\" href=\"#%E5%90%AF%E7%94%A8%E5%92%8C%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E启用和配置\u003C/h3\u003E\n\u003Cp\u003E在后端配置文件中的xjrsoft下配置weboffice.enabled=true即可启用\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750318578722236951/31c7af89_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"效果\" class=\"anchor\" href=\"#%E6%95%88%E6%9E%9C\"\u003E\u003C/a\u003E效果\u003C/h3\u003E\n\u003Cp\u003E前端字段类型为upload的组件后点击编辑文档按钮\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750325934300638171/e6556e06_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E只读模式\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750326025405925810/4b8b8b9a_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E编辑模式 \u003Cimg src=\"https://foruda.gitee.com/images/1750326226217177980/f96cd99e_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E保存文件\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750326252197848283/cde8fa70_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"防火墙申请\" class=\"anchor\" href=\"#%E9%98%B2%E7%81%AB%E5%A2%99%E7%94%B3%E8%AF%B7\"\u003E\u003C/a\u003E防火墙申请\u003C/h3\u003E\n\u003Cp\u003E直连模式需要申请业务端到文档中台间的防火墙\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"代理模式\" class=\"anchor\" href=\"#%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F\"\u003E\u003C/a\u003E代理模式\u003C/h2\u003E\n\u003Cp\u003E代理模式流程\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E是业务系统提前向代理服务注册本系统的前缀及回调地址\u003C/li\u003E\n\u003Cli\u003E前端向后端获取文件在线编辑链接\u003C/li\u003E\n\u003Cli\u003E前端向文档中台发起加载文件、权限等信息请求请求url中的文件id带上本系统的前缀\u003C/li\u003E\n\u003Cli\u003E文档中台回调代理服务代理服务根据回调的文件id前缀找到对应的业务系统地址\u003C/li\u003E\n\u003Cli\u003E代理服务根据业务系统地址转发请求到业务系统回调文件元数据、下载文件等接口\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch3\u003E\n\u003Ca id=\"启用和配置-1\" class=\"anchor\" href=\"#%E5%90%AF%E7%94%A8%E5%92%8C%E9%85%8D%E7%BD%AE-1\"\u003E\u003C/a\u003E启用和配置\u003C/h3\u003E\n\u003Col\u003E\n\u003Cli\u003E\n\u003Cp\u003E业务系统配置文件中增加系统标识用于区分不同业务系统\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750328599179592003/2e3a974f_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E在代理服务系统中配置系统前缀和系统地址映射\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750327676529451748/ee1be83f_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch3\u003E\n\u003Ca id=\"效果-1\" class=\"anchor\" href=\"#%E6%95%88%E6%9E%9C-1\"\u003E\u003C/a\u003E效果\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750328481648245944/d29ee85e_5089312.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"防火墙申请-1\" class=\"anchor\" href=\"#%E9%98%B2%E7%81%AB%E5%A2%99%E7%94%B3%E8%AF%B7-1\"\u003E\u003C/a\u003E防火墙申请\u003C/h3\u003E\n\u003Cp\u003E代理模式需要申请\u003C/p\u003E\n\u003Cp\u003E1、业务系统到文档中台的防火墙\u003C/p\u003E\n\u003Cp\u003E2、代理系统到业务系统的防火墙\u003C/p\u003E","13882350":"\u003Ch3\u003E\n\u003Ca id=\"91-环境准备\" class=\"anchor\" href=\"#91-%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87\"\u003E\u003C/a\u003E9.1 环境准备\u003C/h3\u003E\n\u003Col\u003E\n\u003Cli\u003E可运行JDK环境信创环境arm架构/麒麟系统jdk为openjdk8以上\u003C/li\u003E\n\u003Cli\u003E生产环境建议双机热备加前置机共三台\u003C/li\u003E\n\u003Cli\u003E需要安装的中间件redis、nginx、kkfileview附件预览\u003C/li\u003E\n\u003Cli\u003E需申请防火墙权限和资源的中间件数据库人大金仓、minio文件存储、需要对接的系统数据中台人员组织同步等\u003C/li\u003E\n\u003C/ol\u003E\n\u003Ch3\u003E\n\u003Ca id=\"92-打包部署\" class=\"anchor\" href=\"#92-%E6%89%93%E5%8C%85%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.2 打包部署\u003C/h3\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"bash\" class=\"bash\"\u003E\u003Ccode\u003E# 打包\nmvn clean package -DskipTests\n\n# 运行\njava -jar target/xjrsoft-framework.jar\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Ch3\u003E\n\u003Ca id=\"93-docker部署\" class=\"anchor\" href=\"#93-docker%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.3 Docker部署\u003C/h3\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre lang=\"yaml\" class=\"yaml\"\u003E\u003Ccode\u003E# docker-compose.yml\nversion: '3'\nservices:\n app:\n build: .\n ports:\n - \"8080:8080\"\n environment:\n - SPRING_PROFILES_ACTIVE=prod\n - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/xjrsoft\n - SPRING_REDIS_HOST=redis\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E","14393226":"\u003Ch2\u003E\n\u003Ca id=\"911-前置条件\" class=\"anchor\" href=\"#911-%E5%89%8D%E7%BD%AE%E6%9D%A1%E4%BB%B6\"\u003E\u003C/a\u003E9.1.1 前置条件\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9111-uml部署流程图\" class=\"anchor\" href=\"#9111-uml%E9%83%A8%E7%BD%B2%E6%B5%81%E7%A8%8B%E5%9B%BE\"\u003E\u003C/a\u003E9.1.1.1 UML部署流程图\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750036041620562828/db282fb6_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图1.1-1部署流程参考图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9112-服务器配置\" class=\"anchor\" href=\"#9112-%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.1.1.2 服务器配置\u003C/h3\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E服务器\u003C/th\u003E\n\u003Cth\u003E\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003EIP地址\u003C/td\u003E\n\u003Ctd\u003E10.0.252.28\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E操作系统\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E名称\u003C/td\u003E\n\u003Ctd\u003EDebian GNU/Linux\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E版本\u003C/td\u003E\n\u003Ctd\u003E10 (buster)\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E资源配置\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003ECPU核心数\u003C/td\u003E\n\u003Ctd\u003E4核\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E内存\u003C/td\u003E\n\u003Ctd\u003E8GB\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E磁盘\u003C/td\u003E\n\u003Ctd\u003E350GB未核实\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表1.2-1 部署的服务器说明表\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9113-软件依赖\" class=\"anchor\" href=\"#9113-%E8%BD%AF%E4%BB%B6%E4%BE%9D%E8%B5%96\"\u003E\u003C/a\u003E9.1.1.3 软件依赖\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cp\u003EJDK 安装及环境变量配置\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003ENginx 安装\u003C/p\u003E\n\u003Cp\u003E注本文档不再详细展开基础建设服务的部署细节(如JDK,Nginx,Mysql,Redis等),相关内容可参考组织过程资产库相关开发文档。\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9114-目录规划\" class=\"anchor\" href=\"#9114-%E7%9B%AE%E5%BD%95%E8%A7%84%E5%88%92\"\u003E\u003C/a\u003E9.1.1.4 目录规划\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Cp\u003E后端部署目录新建项目目录\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E/data/wps-proxy/back/wps-proxy-back2025061304.jar\u003C/code\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003E前端资源目录新建项目目录\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E/data/wps-proxy/web/dist/index.html\u003C/code\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003Cli\u003E\n\u003Cp\u003ENginx 配置目录(默认目录)\u003C/p\u003E\n\u003Cp\u003E\u003Ccode\u003E/usr/local/nginx/conf/nginx.conf\u003C/code\u003E\u003C/p\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch2\u003E\n\u003Ca id=\"912-后端部署\" class=\"anchor\" href=\"#912-%E5%90%8E%E7%AB%AF%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.1.2 后端部署\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9121-项目打包\" class=\"anchor\" href=\"#9121-%E9%A1%B9%E7%9B%AE%E6%89%93%E5%8C%85\"\u003E\u003C/a\u003E9.1.2.1 项目打包\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EØ使用Maven命令打包\u003Ccode\u003Emvn package\u003C/code\u003E\n\u003C/li\u003E\n\u003Cli\u003EØ或者使用Idea工具进行Maven打包如图2.1-1所示\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750044578552918667/44992716_15898786.png\" alt=\"e9dcab7fc6fcb53495d0f9afcaa07d13.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.1-1 部署打包说明图\u003C/p\u003E\n\u003Cp\u003EØ修改JAR包文件名称以项目和版本日期加版本号数为目的最终文件如图2.1-2所示\u003Ccode\u003Ewps-proxy-back2025061304.jar\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750045059734076826/bdd1ceb8_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.1-2 部署打包说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9122-上传部署包\" class=\"anchor\" href=\"#9122-%E4%B8%8A%E4%BC%A0%E9%83%A8%E7%BD%B2%E5%8C%85\"\u003E\u003C/a\u003E9.1.2.2 上传部署包\u003C/h3\u003E\n\u003Cp\u003E1、使用FTP工具(如图2.2-1和2.2-2所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750054238059854074/172b7812_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-1 上传部署包参考图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750054364517012002/545dcacf_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-2 上传部署包参考图\u003C/p\u003E\n\u003Cp\u003EØ文件已经上传到服务器将文件复制到指定文件夹即可(如下图2.2-3所示)\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecp /root/dne_back/wps-proxy-back2025061304.jar /data/wps-proxy/back/\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750054459508630328/86a12d52_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-3 上传目录参考图\u003C/p\u003E\n\u003Cp\u003EØ最终文件目录如下(如下图2.2-4所示)\u003Ccode\u003E/data/wps-proxy/back/wps-proxy-back2025061304.jar\u003C/code\u003E\n\u003Cimg src=\"https://foruda.gitee.com/images/1750054498083754416/158db6ad_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-4 上传目录参考图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9123-编写脚本并启动服务\" class=\"anchor\" href=\"#9123-%E7%BC%96%E5%86%99%E8%84%9A%E6%9C%AC%E5%B9%B6%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1\"\u003E\u003C/a\u003E9.1.2.3 编写脚本并启动服务\u003C/h3\u003E\n\u003Cp\u003E1、编写启动脚本\u003C/p\u003E\n\u003Cp\u003E可直接使用命令启动核心命令如下\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Enohup java -jar wps-proxy-back2025061304.jar --spring.profiles.active=dev \u0026gt; app.log 2\u0026gt;\u0026amp;1 \u0026amp;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E也可编写启动脚本示例\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E#!/bin/bash\n\n# 定义变量\nJAR_NAME=\"wps-proxy-back2025061304.jar\"\nPROFILE=\"dev\"\nLOG_FILE=\"app.log\"\n\n# 停止已经运行的进程\necho \"Stopping previous instance if exists...\"\npkill -f $JAR_NAME\n\n# 等待进程停止\nsleep 3\n\n# 启动应用\necho \"Starting application...\"\nnohup java -jar $JAR_NAME --spring.profiles.active=$PROFILE \u0026gt; $LOG_FILE 2\u0026gt;\u0026amp;1 \u0026amp;\n\n# 显示启动状态\nif [ $? -eq 0 ]; then\n echo \"Application started successfully!\"\n echo \"Log file: $LOG_FILE\"\n echo \"You can check logs with: tail -f $LOG_FILE\"\nelse\n echo \"Failed to start application!\"\nfi\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E2、将上述内容保存为 \u003Ccode\u003Estart.sh\u003C/code\u003E 文件\u003C/p\u003E\n\u003Cp\u003E3、给脚本添加可执行权限\u003Ccode\u003Echmod +x start.sh\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E4、运行脚本\u003Ccode\u003E./start.sh\u003C/code\u003E\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"913-前端部署\" class=\"anchor\" href=\"#913-%E5%89%8D%E7%AB%AF%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.1.3 前端部署\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9131-项目打包\" class=\"anchor\" href=\"#9131-%E9%A1%B9%E7%9B%AE%E6%89%93%E5%8C%85\"\u003E\u003C/a\u003E9.1.3.1 项目打包\u003C/h3\u003E\n\u003Cp\u003E开发人员打包成dist文件夹,如下图3.1-1所示\u003C/p\u003E\n\u003Cp\u003EØ打包命令\u003Ccode\u003Enpm run build\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750056357992837346/ae8cb1f0_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.1-1 前端打包说明图\u003C/p\u003E\n\u003Cp\u003E最终文件夹\u003Ccode\u003EE:\\Project\\yuedian\\wps-proxy\\front\\dist\\\u003C/code\u003E\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9132-上传资源\" class=\"anchor\" href=\"#9132-%E4%B8%8A%E4%BC%A0%E8%B5%84%E6%BA%90\"\u003E\u003C/a\u003E9.1.3.2 上传资源\u003C/h3\u003E\n\u003Cp\u003E1、使用FTP工具(如图3.2-1和3.2-2所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750056610086740767/cb5b269f_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-1 上传前端包说明图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750056885594089274/35d6f307_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-2 上传前端包说明图\u003C/p\u003E\n\u003Cp\u003EØ文件夹已经上传到服务器将文件夹整个复制到指定文件夹即可(如下图3.2-3所示)\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecp -r /root/dne_back/dist /data/wps-proxy/web/\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750057193285397049/f909cfca_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-3 前端包目录说明图\u003C/p\u003E\n\u003Cp\u003EØ最终文件目录如下(如下图3.2-4所示)\u003Ccode\u003E/data/wps-proxy/web/dist\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750057294206965653/dd20dca7_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-4 前端包目录说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9133-nginx配置\" class=\"anchor\" href=\"#9133-nginx%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.1.3.3 Nginx配置\u003C/h3\u003E\n\u003Cp\u003E1、配置前端页面和后端接口的反向代理\u003C/p\u003E\n\u003Cp\u003EØ输入下方命令打开Nginx的配置文件如下图3.3-1所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Evim cat /usr/local/nginx/conf/nginx.conf\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750058048724480952/9dd7d1bc_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-1 打开nginx配置文件说明图\u003C/p\u003E\n\u003Cp\u003EØ按“i”键即可进行vim文本插入\u003C/p\u003E\n\u003Cp\u003EØ在最下方的“}”符号内插入以下脚本命令如下图3.3-2所示按需修改\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E\nserver{\n listen 80;\n server_name 10.0.252.28;\n\n root /data/wps-proxy/web/dist;\n index index.html;\n\n location / {\ntry_files $uri $uri/ /index.html;\n}\n\nlocation /api/ {\nproxy_pass http://10.0.252.28:7020/;\nproxy_set_header Host $host;\nproxy_set_header X-Real-IP $remote_addr;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\n}\n}\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750057623618561246/1d304ceb_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-2 修改nginx文件说明图\u003C/p\u003E\n\u003Cp\u003EØ最后按“Esc”键再输入“:wq”即可保存。\u003C/p\u003E\n\u003Cp\u003E2、重启nginx\u003C/p\u003E\n\u003Cp\u003EØ输入下方重载Nginx命令如图所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E/usr/local/nginx/sbin/nginx -s reload \n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9134-应用配置\" class=\"anchor\" href=\"#9134-%E5%BA%94%E7%94%A8%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.1.3.4 应用配置\u003C/h3\u003E\n\u003Cp\u003EØ这里需要修改页面调用的接口地址输入以下命令编辑前端的配置文件如图3.4-1所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Evim /data/wps-proxy/web/dist/_app.config.js\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750058261357141276/63e132e2_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.4-1 前端配置文件说明图\u003C/p\u003E\n\u003Cp\u003EØ按“i”键即可进行vim文本插入\u003C/p\u003E\n\u003Cp\u003EØ将接口地址一项修改为服务器的IP和端口(Nginx代理后的地址)如图3.4-2所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E\"VITE_GLOB_API_URL\":`http://10.0.252.28:80/api`\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750057369280849322/13a5923a_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.4-2 前端接口配置说明图\u003C/p\u003E\n\u003Cp\u003EØ最后按“Esc”键再输入“:wq”即可保存。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"914-验证部署\" class=\"anchor\" href=\"#914-%E9%AA%8C%E8%AF%81%E9%83%A8%E7%BD%B2\"\u003E\u003C/a\u003E9.1.4 验证部署\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9141-后端验证\" class=\"anchor\" href=\"#9141-%E5%90%8E%E7%AB%AF%E9%AA%8C%E8%AF%81\"\u003E\u003C/a\u003E9.1.4.1 后端验证\u003C/h3\u003E\n\u003Cp\u003E1、打开接口文档如图4.1-1如下图所示代表服务启动成功这里用服务的实际地址\u003Ccode\u003Ehttp://10.0.252.28:7020/doc.html#/home\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750058720786847376/d1aa9b42_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.1-1 后端接口文档说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9142-前端验证\" class=\"anchor\" href=\"#9142-%E5%89%8D%E7%AB%AF%E9%AA%8C%E8%AF%81\"\u003E\u003C/a\u003E9.1.4.2 前端验证\u003C/h3\u003E\n\u003Cp\u003E1、打开页面首页如图4.2-1如下图所示代表配置成功Nginx的配置和dist的配置文件配置\u003Ccode\u003Ehttp://10.0.252.28/#/login\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750058907066406463/a9a26878_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.2-1 前端主页说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9143-日志检查\" class=\"anchor\" href=\"#9143-%E6%97%A5%E5%BF%97%E6%A3%80%E6%9F%A5\"\u003E\u003C/a\u003E9.1.4.3 日志检查\u003C/h3\u003E\n\u003Cp\u003E1、打开后端日志\u003C/p\u003E\n\u003Cp\u003E输入查看日志命令如下图4.3-1所示代表启动成功\u003Ccode\u003Etail -f /data/wps-proxy/back/app.log \u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750059243886969602/4c50d4ef_15898786.png\" alt=\"16b17bcb89d1d5ec869225426946ddbe.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-1 后端日志说明图\u003C/p\u003E\n\u003Cp\u003E2、打开Nginx日志\u003C/p\u003E\n\u003Cp\u003E输入查看日志命令如下图4.3-2所示最新日志没有出现报错日志即可\u003Ccode\u003Etail -f /usr/local/nginx/logs/error.log\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750059974850902184/ffda5ebd_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-2 nginx错误日志说明图\u003C/p\u003E","14388998":"\u003Cp\u003E.keep\u003C/p\u003E","14389000":"\u003Cp\u003E\u003Cstrong\u003E文档背景\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E随着云原生技术的全面落地我司基础设施已逐步向容器化与Kubernetes平台迁移。为规范生产级容器编排管理提升部署效率与系统可靠性特制定此K8s集群部署文档重点达成以下目标\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E技术架构统一化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·明确基于Kubernetes的标准化部署架构\u003C/p\u003E\n\u003Cp\u003E·定义Namespace、Deployment、Service等核心资源的配置规范\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E部署流程标准化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·从镜像构建到集群发布的完整操作链路说明\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E运维协作可视化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·声明运维团队与开发团队的职责交接点\u003C/p\u003E\n\u003Cp\u003E·提供资源申请、变更审批、故障排查的标准流程\u003C/p\u003E\n\u003Cp\u003E本次文档编制既作为集群管理的技术基准也作为跨团队云原生能力建设的指导手册后续将随K8s版本迭代持续更新。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"931-图示以及说明\" class=\"anchor\" href=\"#931-%E5%9B%BE%E7%A4%BA%E4%BB%A5%E5%8F%8A%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.3.1 图示以及说明\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9311-组织架构图\" class=\"anchor\" href=\"#9311-%E7%BB%84%E7%BB%87%E6%9E%B6%E6%9E%84%E5%9B%BE\"\u003E\u003C/a\u003E9.3.1.1 组织架构图\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298081251916106/c85b1022_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图1.1-1组织架构图参考图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9312-建设服务器说明\" class=\"anchor\" href=\"#9312-%E5%BB%BA%E8%AE%BE%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.3.1.2 建设服务器说明\u003C/h3\u003E\n\u003Cp\u003E这里准备了四台服务器搭建集群4节点如图表1.2-1所示\u003C/p\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E服务器\u003C/th\u003E\n\u003Cth\u003E服务器最低要求\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E192.168.133.137 node1作为master节点\u003C/td\u003E\n\u003Ctd\u003ECPU \u0026gt;= 2核心 / 内存\u0026gt;= 2GB / 能连接网络\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E192.168.133.138 node2\u003C/td\u003E\n\u003Ctd\u003ECPU \u0026gt;= 2核心 / 内存\u0026gt;= 2GB / 能连接网络\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E192.168.133.139 node3\u003C/td\u003E\n\u003Ctd\u003ECPU \u0026gt;= 2核心 / 内存\u0026gt;= 2GB / 能连接网络\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E192.168.133.140 node4\u003C/td\u003E\n\u003Ctd\u003ECPU \u0026gt;= 2核心 / 内存\u0026gt;= 2GB / 能连接网络\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表1.2-1 部署的服务器说明表\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298191400185254/2d9449a9_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图1.2-1 部署的服务器说明图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"932-初始配置\" class=\"anchor\" href=\"#932-%E5%88%9D%E5%A7%8B%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.3.2 初始配置\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9321-设置hosts文件所有的节点都执行\" class=\"anchor\" href=\"#9321-%E8%AE%BE%E7%BD%AEhosts%E6%96%87%E4%BB%B6%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.1 设置hosts文件所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 通过手动配置 /etc/hosts 文件,确保集群节点之间可以通过主机名直接解析 IP避免依赖 DNS 服务提高节点通信的稳定性和可靠性验证如图2.1-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令这个IP改为自己服务器的IP\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Eecho \"192.168.133.137 node1\n\n192.168.133.138 node2\n\n192.168.133.139 node3\n\n192.168.133.140 node4\" \u0026gt;\u0026gt; /etc/hosts\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ执行命令验证cat /etc/hosts\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298324063024360/b1374d86_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.1-1 修改hosts说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9322-设置hostname所有的节点都执行\" class=\"anchor\" href=\"#9322-%E8%AE%BE%E7%BD%AEhostname%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.2 设置hostname所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 为当前服务器设置永久主机名(如 node1确保Kubernetes 集群节点能正确识别自身和同伴节点身份避免因主机名冲突或未定义导致通信异常如图2.2-1所示。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令四台服务器分别使用node1/node2/node3/node4hostnamectl set-hostname node1\u003C/p\u003E\n\u003Cp\u003EØ 执行命令验证cat /etc/hostname\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298446762354062/0eb8acba_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-1 修改hostname说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9323-时间同步所有的节点都执行\" class=\"anchor\" href=\"#9323-%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.3 时间同步(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E作用 确保 Kubernetes 集群所有节点的时间保持同步避免因时间偏差导致证书失效、日志混乱、调度异常等问题如图2.3-1所示。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令启动chronyd服务systemctl start chronyd\u003C/p\u003E\n\u003Cp\u003EØ 执行命令设置systemctl enable chronyd\u003C/p\u003E\n\u003Cp\u003EØ 执行命令验证date\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298509791451404/b56f2598_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-1 同步服务器时间说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9324-设置防火墙所有的节点都执行\" class=\"anchor\" href=\"#9324-%E8%AE%BE%E7%BD%AE%E9%98%B2%E7%81%AB%E5%A2%99%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.4 设置防火墙(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E作用 关闭防火墙(如 firewalld/iptables可避免拦截 Kubernetes 集群组件间通信确保节点、Pod 及服务正常互联但生产环境建议改用精确放行规则以提升安全性如图2.4-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令停止防火墙systemctl stop firewalld\u003C/p\u003E\n\u003Cp\u003EØ执行命令开机关闭防火墙systemctl disable firewalld\u003C/p\u003E\n\u003Cp\u003EØ执行命令验证systemctl status firewalld\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298566278466263/7ff1b2fd_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-1 设置防火墙说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9325-设置selinux所有的节点都执行\" class=\"anchor\" href=\"#9325-%E8%AE%BE%E7%BD%AEselinux%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.5 设置selinux所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 将selinux 从强制模式enforcing改为禁用模式disabled避免 Kubernetes 组件因安全策略限制导致权限不足或访问被拒绝的问题简化集群部署流程如图2.5-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令设置sed -i 's/enforcing/disabled/' /etc/selinux/config\u003C/p\u003E\n\u003Cp\u003EØ执行命令验证getenforce\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298637987077717/ef68ae89_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-1 设置SElinux说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9326-设置swap分区所有的节点都执行\" class=\"anchor\" href=\"#9326-%E8%AE%BE%E7%BD%AEswap%E5%88%86%E5%8C%BA%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.6 设置swap分区所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 Kubernetes 要求节点禁用交换分区swap以确保内存管理和调度策略如 kubelet 的资源分配能够正确工作避免因swap 使用导致性能下降或不可预测的行为如图2.6-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令设置sed -i \"s/.\u003Cem\u003Eswap.\u003C/em\u003E/#\u0026amp;/\" /etc/fstab\u003C/p\u003E\n\u003Cp\u003EØ执行命令验证cat /etc/fstab\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298719405557531/c3b3e075_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.6-1 设置swap说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9327-设置网桥过滤和地址转发所有的节点都执行\" class=\"anchor\" href=\"#9327-%E8%AE%BE%E7%BD%AE%E7%BD%91%E6%A1%A5%E8%BF%87%E6%BB%A4%E5%92%8C%E5%9C%B0%E5%9D%80%E8%BD%AC%E5%8F%91%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.7 设置网桥过滤和地址转发(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E作用调整内核网络参数确保 Kubernetes 的 CNI容器网络插件如 Calico、Flannel 和 Service 网络(如 kube-proxy 的 iptables/IPVS 模式) 正常工作解决容器跨节点通信和流量转发问题如图2.7-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令设置\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /etc/sysctl.d/kubernetes.conf \u0026lt;\u0026lt; EOF\n\nnet.bridge.bridge-nf-call-ip6tables = 1\n\nnet.bridge.bridge-nf-call-iptables = 1\n\nnet.ipv4.ip_forward = 1\n\nEOF\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令执行生效sysctl --system\u003C/p\u003E\n\u003Cp\u003EØ 执行命令验证sysctlnet.bridge.bridge-nf-call-iptables net.ipv4.ip_forward\u003C/p\u003E\n\u003Cp\u003E注意如果报错系统当前缺少 bridge-nf-call-iptables 相关的内核模块支持,需要加载 br_netfilter 内核模块执行加载命令sudo modprobe br_netfilter\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298843959766873/cccdef88_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.7-1 设置网桥过滤和地址转发说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9328-设置国内yum源非必须如需则所有的节点都执行\" class=\"anchor\" href=\"#9328-%E8%AE%BE%E7%BD%AE%E5%9B%BD%E5%86%85yum%E6%BA%90%E9%9D%9E%E5%BF%85%E9%A1%BB%E5%A6%82%E9%9C%80%E5%88%99%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.2.8 设置国内yum源非必须如需则所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 将默认的 CentOS Yum 源替换为国内镜像(如阿里云),加速软件包下载,解决官方源访问慢或不可用的问题,确保 Kubernetes 依赖的组件(如 docker-ce、kubeadm能快速安装如图2.8-1所示。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令备份当前的yum源mv /etc/yum.repos.d /etc/yum.repos.d.backup4comex\u003C/p\u003E\n\u003Cp\u003EØ 执行命令新建空的yum源设置目录mkdir /etc/yum.repos.d\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载阿里云的yum源配置curl -o /etc/yum.repos.d/CentOS-Base.repo \u003Ca href=\"https://mirrors.aliyun.com/repo/Centos-7.repo\"\u003Ehttps://mirrors.aliyun.com/repo/Centos-7.repo\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令清除yum clean all\u003C/p\u003E\n\u003Cp\u003EØ 执行命令重建yum makecache\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750298963000833485/b4aca6b6_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.8-1 设置国内yum源说明图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"933-安装docker\" class=\"anchor\" href=\"#933-%E5%AE%89%E8%A3%85docker\"\u003E\u003C/a\u003E9.3.3 安装Docker\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9331-设置国内docker源非必须如需则所有的节点都执行\" class=\"anchor\" href=\"#9331-%E8%AE%BE%E7%BD%AE%E5%9B%BD%E5%86%85docker%E6%BA%90%E9%9D%9E%E5%BF%85%E9%A1%BB%E5%A6%82%E9%9C%80%E5%88%99%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.3.1 设置国内docker源非必须如需则所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 将 Docker 官方 Yum 仓库download.docker.com替换为阿里云镜像源解决国内下载 Docker 组件(如 docker-ce、containerd.io速度慢或无法访问的问题确保容器运行时环境能快速安装如图3.1-1所示\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(配置): curl -o /etc/yum.repos.d/docker-ce.repo \u003Ca href=\"https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo\"\u003Ehttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令清除yum clean all\u003C/p\u003E\n\u003Cp\u003EØ 执行命令重建yum makecache\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750302432693786988/e081af48_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.1-1 设置国内docker源说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9332-下载docker所有的节点都执行\" class=\"anchor\" href=\"#9332-%E4%B8%8B%E8%BD%BDdocker%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.3.2 下载docker所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 Docker 作为容器运行时Container Runtime为 Kubernetes 提供底层容器管理能力(创建、运行容器),但新版 K8s 已转向更轻量的 containerd 或 CRI-O不再强制依赖 Docker如图3.2-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令下载yum install -y docker-ce-20.10.9-3.el7 docker-ce-cli-20.10.9-3.el7 containerd.io-1.6.6-3.1.el7 docker-compose-plugin-2.6.0-3.el7\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750302498627805959/ba05aed9_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-1 下载docker说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9333-设置daemonjson所有的节点都执行\" class=\"anchor\" href=\"#9333-%E8%AE%BE%E7%BD%AEdaemonjson%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.3.3 设置daemon.json所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 通过 daemon.json 配置 Docker 守护进程dockerd的核心参数包括镜像加速、存储驱动、日志选项、网络设置等以优化容器运行环境并适配 Kubernetes 需求。\u003C/p\u003E\n\u003Cp\u003EØ执行命令创建目录mkdir /etc/docker\u003C/p\u003E\n\u003Cp\u003EØ执行命令编辑文件vi /etc/docker/daemon.json\u003C/p\u003E\n\u003Cp\u003E将daemon.json内容替换至如下内容并保存如图3.3-1所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E{\n \"exec-opts\": [\n \"native.cgroupdriver=systemd\"\n ],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\",\n \"storage-opts\": [\n \"overlay2.override_kernel_check=true\"\n ]\n}\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750302724486133303/8753a727_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-1 配置daemon.json文件说明图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9334-启动docker所有的节点都执行\" class=\"anchor\" href=\"#9334-%E5%90%AF%E5%8A%A8docker%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.3.4 启动docker所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令启动systemctl restart docker\u003C/p\u003E\n\u003Cp\u003EØ 执行命令开机自启systemctl enable docker\u003C/p\u003E\n\u003Cp\u003EØ 执行命令验证如图3.4-1所示systemctl status docker\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750302986119269159/ac42949f_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.4-1 启动docker说明图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"934-安装kubernetes\" class=\"anchor\" href=\"#934-%E5%AE%89%E8%A3%85kubernetes\"\u003E\u003C/a\u003E9.3.4 安装Kubernetes\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9341-设置国内kubernetes源所有的节点都执行\" class=\"anchor\" href=\"#9341-%E8%AE%BE%E7%BD%AE%E5%9B%BD%E5%86%85kubernetes%E6%BA%90%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.4.1 设置国内Kubernetes源所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003E作用 将 Kubernetes 官方 Yum 仓库(\u003Ca href=\"https://packages.cloud.google.com%EF%BC%89%E6%9B%BF%E6%8D%A2%E4%B8%BA%E9%98%BF%E9%87%8C%E4%BA%91%E9%95%9C%E5%83%8F%E6%BA%90%EF%BC%8C%E8%A7%A3%E5%86%B3%E5%9B%BD%E5%86%85%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E6%88%96%E4%B8%8B%E8%BD%BD%E9%80%9F%E5%BA%A6%E6%85%A2%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%8C%E7%A1%AE%E4%BF%9Dkubeadm%E3%80%81kubelet%E3%80%81kubectl\"\u003Ehttps://packages.cloud.google.com替换为阿里云镜像源解决国内无法访问或下载速度慢的问题确保kubeadm、kubelet、kubectl\u003C/a\u003E 等组件能够快速、稳定安装如图4.1-1所示。\u003C/p\u003E\n\u003Cp\u003EØ执行命令\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026lt;\u0026lt;EOF \u0026gt; /etc/yum.repos.d/kubernetes.repo\n[kubernetes]\nname=Kubernetes\nbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=0\ngpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令清除yum clean all\u003C/p\u003E\n\u003Cp\u003EØ 执行命令重建yum makecache\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750314888297212352/8fed9cec_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.1-1设置国内Kubernetes源示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9342-下载kubeadmkubelet-kubectl所有的节点都执行\" class=\"anchor\" href=\"#9342-%E4%B8%8B%E8%BD%BDkubeadmkubelet-kubectl%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.4.2 下载kubeadm/kubelet /kubectl所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令下载如图4.2-1所示 yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0\u003C/p\u003E\n\u003Cp\u003EØ 执行命令启动systemctl status kubelet\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(开机自启,非必须systemctl enable kubelet\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750314977666110382/4f698039_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.2-1安装K8S组件示意图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"935-部署kubernetes集群\" class=\"anchor\" href=\"#935-%E9%83%A8%E7%BD%B2kubernetes%E9%9B%86%E7%BE%A4\"\u003E\u003C/a\u003E9.3.5 部署Kubernetes集群\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9351-预下载镜像在master节点执行\" class=\"anchor\" href=\"#9351-%E9%A2%84%E4%B8%8B%E8%BD%BD%E9%95%9C%E5%83%8F%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.1 预下载镜像在master节点执行\u003C/h3\u003E\n\u003Cp\u003E作用预先从阿里云镜像仓库下载 Kubernetes 控制平面所需的所有容器镜像,确保 kubeadm init 初始化 master 节点时能快速顺利完成避免因网络问题导致安装失败如图5.1-1所示。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令拉取kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750315161061559421/618b5c33_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.1-1预下载镜像示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9352-初始化kubernetes在master节点执行\" class=\"anchor\" href=\"#9352-%E5%88%9D%E5%A7%8B%E5%8C%96kubernetes%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.2 初始化kubernetes在master节点执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令:\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ekubeadm init \\\n --apiserver-advertise-address=192.168.133.137 \\\n --image-repository registry.aliyuncs.com/google_containers \\\n --kubernetes-version v1.23.0 \\\n --service-cidr=10.96.0.0/12 \\\n --pod-network-cidr=10.244.0.0/16 \\\n --ignore-preflight-errors=all\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E备注\u003C/p\u003E\n\u003Cp\u003Eapiserver-advertise-address # 集群通告地址master 机器IP\u003C/p\u003E\n\u003Cp\u003Eimage-repository # 由于默认拉取镜像地址k8s.gcr.io国内无法访问这里指定阿里云镜像仓库地址\u003C/p\u003E\n\u003Cp\u003Ekubernetes-version #K8s版本与上面安装的一致\u003C/p\u003E\n\u003Cp\u003Eservice-cidr #集群内部虚拟网络Pod统一访问入口可以不用更改直接用上面的参数\u003C/p\u003E\n\u003Cp\u003Epod-network-cidr #Pod网络与下面部署的CNI网络组件yaml中保持一致可以不用更改直接用上面的参数\u003C/p\u003E\n\u003Cp\u003EØ上述命令执行完之后控制台末尾有加入集群的join命令需要复制记录下来子节点加入集群需要用到该命令如图5.2-1所示示例\u003C/p\u003E\n\u003Cp\u003Ekubeadm join 192.168.133.137:6443 --token gx38zz.iokskhaa4uehb9nr--discovery-token-ca-cert-hash sha256:5e84b16ac4c5c52da4225162b1574316797e518d26e8dd0c26a2aa6a3253038c\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750315656320689437/465ab745_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.2-1初始化K8S示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9353-设置kubectl命令行工具环境在master节点执行\" class=\"anchor\" href=\"#9353-%E8%AE%BE%E7%BD%AEkubectl%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7%E7%8E%AF%E5%A2%83%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.3 设置kubectl命令行工具环境在master节点执行\u003C/h3\u003E\n\u003Cp\u003E作用配置 kubectl 的访问权限、设置环境变量、优化命令行体验,确保能顺利使用 kubectl管理 Kubernetes 集群如图5-3.1所示)。\u003C/p\u003E\n\u003Cp\u003EØ执行命令创建目录mkdir -p $HOME/.kube\u003C/p\u003E\n\u003Cp\u003EØ 执行命令复制文件sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\u003C/p\u003E\n\u003Cp\u003EØ执行命令修改权限sudo chown $(id -u):$(id -g) $HOME/.kube/config\u003C/p\u003E\n\u003Cp\u003EØ执行命令修改环境变量vim /root/.bash_profile\u003C/p\u003E\n\u003Cp\u003E将.bash_profile内容末尾追加如下内容并保存\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E# 超级用户变量\nexport KUBECONFIG=/etc/kubernetes/admin.conf\n# 设置别名\nalias k=kubectl\n# 设置kubectl命令补齐功能\nsource \u0026lt;(kubectl completion bash)\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令环境变量生效source /root/.bash_profile\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750315829480536871/4bac21e2_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.3-1配置kubectl示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9354-设置kubernetes网络在master节点执行\" class=\"anchor\" href=\"#9354-%E8%AE%BE%E7%BD%AEkubernetes%E7%BD%91%E7%BB%9C%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.4 设置kubernetes网络在master节点执行\u003C/h3\u003E\n\u003Cp\u003E作用安装 Flannel CNI 插件为Kubernetes 集群提供 Pod 网络,使节点状态变为 Ready 并支持跨节点 Pod 通信。\u003C/p\u003E\n\u003Cp\u003EØ 执行命令安装插件wget \u003Ca href=\"https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\"\u003Ehttps://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令修改配置vim kube-flannel.yml\u003C/p\u003E\n\u003Cp\u003E将kube-flannel.yml对应内容替换至如下内容并保存如图5.4-1所示\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Enet-conf.json: |\n {\n \"Network\": \"10.244.0.0/16\",\n \"Backend\"\": {\n \"Type\": \"vxlan\"\n }\n}\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316017928004449/44bd8802_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.4-1配置kube-flannel.yml文件示意图\u003C/p\u003E\n\u003Cp\u003EØ 执行命令配置生效kubectl apply -f kube-flannel.yml\u003C/p\u003E\n\u003Cp\u003EØ 执行命令查看pod状态kubectl get pod --all-namespaces\u003C/p\u003E\n\u003Cp\u003E注意全部服务必须要为Running状态才行如图5.4-2所示。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316104673410905/f9079021_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.4-2验证pod状态示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9355-子节点加入集群在所有子节点执行\" class=\"anchor\" href=\"#9355-%E5%AD%90%E8%8A%82%E7%82%B9%E5%8A%A0%E5%85%A5%E9%9B%86%E7%BE%A4%E5%9C%A8%E6%89%80%E6%9C%89%E5%AD%90%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.5.5 子节点加入集群(在所有子节点执行)\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令9.3.5.2步骤执行完初始化之后控制台末尾的加入集群的join命令如图5.5-1所示kubeadm join 192.168.133.137:6443 --token gx38zz.iokskhaa4uehb9nr--discovery-token-ca-cert-hash sha256:5e84b16ac4c5c52da4225162b1574316797e518d26e8dd0c26a2aa6a3253038c\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316240265279778/86dea769_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.5-1子节点加入集群示意图\u003C/p\u003E\n\u003Cp\u003E注意默认的kubeadm join Token有效期为24小时。如果子节点加入集群失败请在Master节点执行以下命令重新生成Token并在所有子节点重新加入集群指令如图5.5-2所示kubeadm token create --print-join-command\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316275543725383/984e06be_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.5-2子节点加入集群示意图\u003C/p\u003E\n\u003Cp\u003EØ 执行命令在master节点执行验证kubectl get nodes\u003C/p\u003E\n\u003Cp\u003E所有节点状态显示 Ready如图5.5-3所示表示子节点已成功加入集群部署完成\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750316309760944718/b1c9c3cb_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图5.5-3集群节点状态验证示意图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"936-arm64架构使用二进制离线的方式安装集群\" class=\"anchor\" href=\"#936-arm64%E6%9E%B6%E6%9E%84%E4%BD%BF%E7%94%A8%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%A6%BB%E7%BA%BF%E7%9A%84%E6%96%B9%E5%BC%8F%E5%AE%89%E8%A3%85%E9%9B%86%E7%BE%A4\"\u003E\u003C/a\u003E9.3.6 ARM64架构使用二进制离线的方式安装集群\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9361-准备离线包\" class=\"anchor\" href=\"#9361-%E5%87%86%E5%A4%87%E7%A6%BB%E7%BA%BF%E5%8C%85\"\u003E\u003C/a\u003E9.3.6.1 准备离线包\u003C/h3\u003E\n\u003Cp\u003E在联网环境准备离线包(需要安装docker)或者让实施人员直接提供离线包跳过本章直接从9.3.6.2章节开始)。\u003C/p\u003E\n\u003Cp\u003E离线包文件结构如下表所示\u003C/p\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003Ek8s-offline-arm64-20250630.tar.gz\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003Escripts\u003Cbr\u003Eimages\u003Cbr\u003E------quay.io_coreos_flannel_v0.14.0-arm64.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_etcd_3.5.1-0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_kube-apiserver_v1.23.0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_kube-controller-manager_v1.23.0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_kube-proxy_v1.23.0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_kube-scheduler_v1.23.0.tar\u003Cbr\u003E------registry.aliyuncs.com_google_containers_pause_3.6.tar\u003Cbr\u003Econfigs\u003Cbr\u003E------daemon.json\u003Cbr\u003Ebinaries\u003Cbr\u003E------cni-plugins-linux-arm64-v1.1.1.tgz\u003Cbr\u003E------containerd-1.6.6-linux-arm64.tar.gz\u003Cbr\u003E------docker-20.10.9.tgz\u003Cbr\u003E------kubernetes-server-linux-arm64.tar.gz\u003Cbr\u003Ekube-flannel.yml\u003Cbr\u003Eimage-list.txt\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003EØ 执行命令创建离线包目录mkdir -p /root/offline-pkg/{binaries,images,scripts,configs}\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载Docker CEwget -P /root/offline-pkg/binaries \\ \u003Ca href=\"https://download.docker.com/linux/static/stable/aarch64/docker-20.10.9.tgz\"\u003Ehttps://download.docker.com/linux/static/stable/aarch64/docker-20.10.9.tgz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令设置版本变量K8S_VER=\"v1.23.0\"\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载Kubernetes组件wget -P /root/offline-pkg/binaries \\ \u003Ca href=\"https://dl.k8s.io/%24K8S_VER/kubernetes-server-linux-arm64.tar.gz\"\u003Ehttps://dl.k8s.io/$K8S_VER/kubernetes-server-linux-arm64.tar.gz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载依赖工具wget -P /root/offline-pkg/binaries \\ \u003Ca href=\"https://github.com/containerd/containerd/releases/download/v1.6.6/containerd-1.6.6-linux-arm64.tar.gz\"\u003Ehttps://github.com/containerd/containerd/releases/download/v1.6.6/containerd-1.6.6-linux-arm64.tar.gz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令下载CNI插件wget -P /root/offline-pkg/binaries \\ \u003Ca href=\"https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-arm64-v1.1.1.tgz\"\u003Ehttps://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-arm64-v1.1.1.tgz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003E注意TAR包也可以直接在浏览器打开直接下载下载好手动拉到指定目录/root/offline-pkg/binaries例如浏览器打开\u003Ca href=\"https://download.docker.com/linux/static/stable/aarch64/docker-20.10.9.tgz\"\u003Ehttps://download.docker.com/linux/static/stable/aarch64/docker-20.10.9.tgz\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(创建镜像列表文件):\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /root/offline-pkg/image-list.txt \u0026lt;\u0026lt;EOF\nregistry.aliyuncs.com/google_containers/kube-apiserver-arm64:$K8S_VER\nregistry.aliyuncs.com/google_containers/kube-controller-manager-arm64:$K8S_VER\nregistry.aliyuncs.com/google_containers/kube-scheduler-arm64:$K8S_VER\nregistry.aliyuncs.com/google_containers/kube-proxy-arm64:$K8S_VER\nregistry.aliyuncs.com/google_containers/pause:3.6\nregistry.aliyuncs.com/google_containers/etcd:3.5.1-0\nquay.io/coreos/flannel:v0.14.0-arm64\nEOF\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令(拉取并保存镜像):\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ewhile read img; do\n docker pull $img\n save_name=$(echo $img | sed 's|/|_|g; s|:|_|g')\n docker save $img -o \"/root/offline-pkg/images/${save_name}.tar\"\ndone \u0026lt; /root/offline-pkg/image-list.txt\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令准备Docker配置文件\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /root/offline-pkg/configs/daemon.json \u0026lt;\u0026lt;EOF\n{\n \"exec-opts\": [\n \"native.cgroupdriver=systemd\"\n ],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\",\n \"storage-opts\": [\n \"overlay2.override_kernel_check=true\"\n ]\n}\nEOF\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令Flannel配置wget -O /root/offline-pkg/kube-flannel.yml \\ \u003Ca href=\"https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\"\u003Ehttps://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml\"\u003Esed -i's#10.244.0.0/16#10.244.0.0/16#g' /root/offline-pkg/kube-flannel.yml\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ执行命令打包为离线文件tar -czvf k8s-offline-arm64-$(date +%Y%m%d).tar.gz -C /root/offline-pkg .\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9362-离线包分别复制到目标服务所有的节点都执行\" class=\"anchor\" href=\"#9362-%E7%A6%BB%E7%BA%BF%E5%8C%85%E5%88%86%E5%88%AB%E5%A4%8D%E5%88%B6%E5%88%B0%E7%9B%AE%E6%A0%87%E6%9C%8D%E5%8A%A1%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.2 离线包分别复制到目标服务(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751359786127490355/8da06e48_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.2-1服务器离线包文件示意图\u003C/p\u003E\n\u003Cp\u003EØ 执行命令创建目录mkdir -p /root/offline-pkg/\u003C/p\u003E\n\u003Cp\u003EØ 执行命令解压bsdtar -xzf k8s-offline-arm64-*.tar.gz -C /root/offline-pkg/\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9363-执行文档步骤9321至9327设置基础环境所有的节点都执行\" class=\"anchor\" href=\"#9363-%E6%89%A7%E8%A1%8C%E6%96%87%E6%A1%A3%E6%AD%A5%E9%AA%A49321%E8%87%B39327%E8%AE%BE%E7%BD%AE%E5%9F%BA%E7%A1%80%E7%8E%AF%E5%A2%83%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.3 执行文档步骤9.3.2.1至9.3.2.7设置基础环境(所有的节点都执行)\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751359875810571345/b2ff13d7_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.3-1服务器设置基础环境示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9364-安装docker所有的节点都执行\" class=\"anchor\" href=\"#9364-%E5%AE%89%E8%A3%85docker%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.4 安装docker所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令cd /root/offline-pkg\u003C/p\u003E\n\u003Cp\u003EØ 执行命令解压bsdtar -xzf docker-20.10.9.tgz -C /tmp\u003C/p\u003E\n\u003Cp\u003EØ 执行命令复制sudo cp -v /tmp/docker/* /usr/bin/\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(设置执行权限): sudo chmod 755 /usr/bin/{dockerd,docker,containerd,containerd-shim,containerd-shim-runc-v2,ctr,runc,docker-init,docker-proxy}\u003C/p\u003E\n\u003Cp\u003EØ 执行命令创建systemd服务\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /etc/systemd/system/docker.service \u0026lt;\u0026lt;EOF\n[Unit]\nDescription=Docker Application Container Engine\nAfter=network.target\n\n[Service]\nType=notify\nExecStart=/usr/bin/dockerd\nExecReload=/bin/kill -s HUP $MAINPID\nLimitNOFILE=infinity\nLimitNPROC=infinity\nTimeoutStartSec=0\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ 执行命令配置Dockermkdir /etc/docker\u003C/p\u003E\n\u003Cp\u003EØ 执行命令复制Docker配置cp configs/daemon.json /etc/docker/\u003C/p\u003E\n\u003Cp\u003EØ 执行命令自启Dockersystemctl enable docker\u003C/p\u003E\n\u003Cp\u003EØ 执行命令启动Dockersystemctl start docker\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751360049253721470/f90ff21d_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.4-1离线安装docker示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9365-安装k8s所有的节点都执行\" class=\"anchor\" href=\"#9365-%E5%AE%89%E8%A3%85k8s%E6%89%80%E6%9C%89%E7%9A%84%E8%8A%82%E7%82%B9%E9%83%BD%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.5 安装K8S所有的节点都执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令cd /root/offline-pkg\u003C/p\u003E\n\u003Cp\u003EØ 执行命令解压K8Star -xzf binaries/kubernetes-server-linux-arm64.tar.gz -C /usr/local\u003C/p\u003E\n\u003Cp\u003EØ 执行命令cd /usr/local/kubernetes/server/bin\u003C/p\u003E\n\u003Cp\u003EØ 执行命令复制cp kubeadm kubelet kubectl /usr/local/bin/\u003C/p\u003E\n\u003Cp\u003EØ 执行命令cd /root/offline-pkg\u003C/p\u003E\n\u003Cp\u003EØ 执行命令mkdir -p /opt/cni/bin\u003C/p\u003E\n\u003Cp\u003EØ 执行命令(解压CNI插件)tar -xzf binaries/cni-plugins-linux-arm64-v1.1.1.tgz -C /opt/cni/bin\u003C/p\u003E\n\u003Cp\u003EØ 执行命令配置kubelet服务\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecat \u0026gt; /etc/systemd/system/kubelet.service \u0026lt;\u0026lt;EOF\n[Unit]\nDescription=Kubernetes Kubelet\nAfter=docker.service\n\n[Service]\nExecStart=/usr/local/bin/kubelet \\\\\n --container-runtime=remote \\\\\n --container-runtime-endpoint=unix:///run/containerd/containerd.sock \\\\\n --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6\nRestart=always\nStartLimitInterval=0\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ执行命令启动systemctl enable kubelet\u003C/p\u003E\n\u003Cp\u003EØ执行命令加载容器镜像\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Efor img in images/*.tar; do\n docker load -i $img\ndone\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E图6.5-1加载镜像示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9366-执行文档步骤9352和9353设置主节点环境在master节点执行\" class=\"anchor\" href=\"#9366-%E6%89%A7%E8%A1%8C%E6%96%87%E6%A1%A3%E6%AD%A5%E9%AA%A49352%E5%92%8C9353%E8%AE%BE%E7%BD%AE%E4%B8%BB%E8%8A%82%E7%82%B9%E7%8E%AF%E5%A2%83%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.6 执行文档步骤9.3.5.2和9.3.5.3设置主节点环境在master节点执行\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751360256701285141/255c6f08_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.6-1设置主节点环境示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1751360269379932427/1db79a48_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图6.6-2设置主节点环境示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9367-设置kubernetes网络在master节点执行\" class=\"anchor\" href=\"#9367-%E8%AE%BE%E7%BD%AEkubernetes%E7%BD%91%E7%BB%9C%E5%9C%A8master%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.7 设置kubernetes网络在master节点执行\u003C/h3\u003E\n\u003Cp\u003EØ 执行命令加载kubectl apply -f /root/offline-pkg/kube-flannel.yml\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9368-执行文档步骤9355加入集群在所有子节点执行\" class=\"anchor\" href=\"#9368-%E6%89%A7%E8%A1%8C%E6%96%87%E6%A1%A3%E6%AD%A5%E9%AA%A49355%E5%8A%A0%E5%85%A5%E9%9B%86%E7%BE%A4%E5%9C%A8%E6%89%80%E6%9C%89%E5%AD%90%E8%8A%82%E7%82%B9%E6%89%A7%E8%A1%8C\"\u003E\u003C/a\u003E9.3.6.8 执行文档步骤9.3.5.5加入集群(在所有子节点执行)\u003C/h3\u003E\n\u003Ch2\u003E\n\u003Ca id=\"937-结语\" class=\"anchor\" href=\"#937-%E7%BB%93%E8%AF%AD\"\u003E\u003C/a\u003E9.3.7 结语\u003C/h2\u003E\n\u003Cp\u003E当前 Kubernetes 集群已完成标准化部署,系统将按以下机制运行:\u003C/p\u003E\n\u003Cp\u003EØ高可用保障Master 节点采用多实例部署,默认启用 kubelet 自动恢复机制\u003C/p\u003E\n\u003Cp\u003EØ网络就绪Flannel CNI 已配置 10.244.0.0/16 Pod 网段VXLAN 后端模式)\u003C/p\u003E\n\u003Cp\u003EØ证书管理kubeadm 自动生成证书有效期 1 年,到期前需执行 kubeadm certs renew\u003C/p\u003E\n\u003Cp\u003E后续运维人员可通过以下方式管理集群\u003C/p\u003E\n\u003Cp\u003EØ使用 kubectl 命令行工具或部署 Kubernetes Dashboard 进行可视化操作\u003C/p\u003E\n\u003Cp\u003EØ通过 kubeadm upgrade 进行集群版本升级(需遵循版本迭代规范)\u003C/p\u003E\n\u003Cp\u003EØ按需扩展 Node 节点join token 有效期 24h需及时更新\u003C/p\u003E\n\u003Cp\u003E如需调整网络插件、存储方案或安全策略请联系基础设施团队评估变更影响。\u003C/p\u003E","14388997":"\u003Cp\u003E\u003Cstrong\u003E文档背景\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E随着 DevOps 理念的深入实践,我司已实现开发人员提交代码后的全自动化构建部署流程。为帮助开发团队更清晰地理解 CI/CD 自动化机制,特修订此文档,重点说明:\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E职责边界明确化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·开发人员仅需关注代码提交至 Git 仓库\u003C/p\u003E\n\u003Cp\u003E·后续构建、测试、部署全流程由 Jenkins 自动完成\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E流程透明化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·详细解析从代码提交到应用上线的完整链路\u003C/p\u003E\n\u003Cp\u003E·说明各环节的触发条件、执行逻辑和预期结果\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E问题定位标准化\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E·提供构建失败时的关键检查点和日志分析指引\u003C/p\u003E\n\u003Cp\u003E·建立统一的异常处理流程\u003C/p\u003E\n\u003Cp\u003E本次修订旨在提升团队对自动化流水线的认知度确保开发与运维的高效协作。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"941-图示以及说明\" class=\"anchor\" href=\"#941-%E5%9B%BE%E7%A4%BA%E4%BB%A5%E5%8F%8A%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.4.1 图示以及说明\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9411-uml流程图\" class=\"anchor\" href=\"#9411-uml%E6%B5%81%E7%A8%8B%E5%9B%BE\"\u003E\u003C/a\u003E9.4.1.1 UML流程图\u003C/h3\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749544901832427034/f490ea29_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图1.1-1 流程参考图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9412-基础建设服务说明\" class=\"anchor\" href=\"#9412-%E5%9F%BA%E7%A1%80%E5%BB%BA%E8%AE%BE%E6%9C%8D%E5%8A%A1%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.4.1.2 基础建设服务说明\u003C/h3\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E服务\u003C/th\u003E\n\u003Cth\u003EIP和端口\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003EJava\u003C/td\u003E\n\u003Ctd\u003E10.4.126.62\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E数据库金仓数据库\u003C/td\u003E\n\u003Ctd\u003E10.0.252.76:54321\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003ERedis\u003C/td\u003E\n\u003Ctd\u003E10.0.250.17:6379\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E文件服务器Minio\u003C/td\u003E\n\u003Ctd\u003E10.0.252.28:9000\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003ENacos\u003C/td\u003E\n\u003Ctd\u003E10.0.252.1:8849\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表1.2-1 部署服务说明表\u003C/p\u003E\n\u003Cp\u003E注本文档不再详细展开基础建设服务的部署细节(如Mysql,Redis,Minio等),相关内容可参考组织过程资产库相关开发文档。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"942-jenkins的搭建及初始配置\" class=\"anchor\" href=\"#942-jenkins%E7%9A%84%E6%90%AD%E5%BB%BA%E5%8F%8A%E5%88%9D%E5%A7%8B%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2 Jenkins的搭建及初始配置\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9421-jenkins服务器配置\" class=\"anchor\" href=\"#9421-jenkins%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.1 Jenkins服务器配置\u003C/h3\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E服务器\u003C/th\u003E\n\u003Cth\u003E\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003EIP地址\u003C/td\u003E\n\u003Ctd\u003E10.0.252.12\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E操作系统\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E名称\u003C/td\u003E\n\u003Ctd\u003EKylin Linux Advanced Server\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E版本\u003C/td\u003E\n\u003Ctd\u003EV10 (Halberd)\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E资源配置\u003C/td\u003E\n\u003Ctd\u003E\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003ECPU核心数\u003C/td\u003E\n\u003Ctd\u003E32核\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E内存\u003C/td\u003E\n\u003Ctd\u003E32GB\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E磁盘\u003C/td\u003E\n\u003Ctd\u003E300GB\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表2.1-1 服务器配置说明表\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9422-下载及安装jenkins\" class=\"anchor\" href=\"#9422-%E4%B8%8B%E8%BD%BD%E5%8F%8A%E5%AE%89%E8%A3%85jenkins\"\u003E\u003C/a\u003E9.4.2.2 下载及安装Jenkins\u003C/h3\u003E\n\u003Cp\u003EØ 打开服务器界面(如图2.2-1所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545695839041637/80b22f7f_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-1服务器界面示意图\u003C/p\u003E\n\u003Cp\u003EØ 输入docker下载Jenkins命令docker基础建设这里不赘述可参考\u003Ca href=\"https://e.gitee.com/gdyditc/projects/725584/docs/2954258/file/6682560?sub_id=14389000\"\u003E9.3.3章节\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003Edocker run -p 8080:8080 -p 50000:50000 --name jenkins- -v /usr/docker/jenkins_data:/var/jenkins_home\n-d jenkins/jenkins:lts\u003C/p\u003E\n\u003Cp\u003E指令解析\u003C/p\u003E\n\u003Cp\u003E-p端口映射 左边是本地端口右边是docker容器端口 8080是Jenkins Web 界面的工作端口,50000是JNLPJava Network Launch Protocol工作端口。这个端口用于 Jenkins 节点和主控节点之间的通信。\u003C/p\u003E\n\u003Cp\u003E-v目录挂载将主机上的 /usr/docker/jenkins_data 目录挂载到容器内的\n/var/jenkins_home 目录,用于持久化 Jenkins 的数据。\u003C/p\u003E\n\u003Cp\u003EØ安装成功输入命令检查docker ps如图2.2-2所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545760923191883/b98c1893_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.2-2 docker安装jenkins并启动容器示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9423-初始配置\" class=\"anchor\" href=\"#9423-%E5%88%9D%E5%A7%8B%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.3 初始配置\u003C/h3\u003E\n\u003Cp\u003EØ进入Web页面,浏览器打开:\u003Ca href=\"http://10.0.252.12:8080/\"\u003Ehttp://10.0.252.12:8080/\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ按照页面提示打开初始密码文件进行复制,输入密码(如图2.3-1所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545819973260965/5916e442_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-1Jenkins打开web页面并输入初始密码示意图\u003C/p\u003E\n\u003Cp\u003EØ选择安装推荐的插件(如图2.3-2所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545850424016350/9c21ca02_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-2Jenkins安装推荐的插件示意图\u003C/p\u003E\n\u003Cp\u003EØ随后让我们创建一个管理员账户正常创建即可后续可手动创建Jenkins用户如图2.3-3所示。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545874965561062/3ec2d5a7_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-3Jenkins创建用户示意图\u003C/p\u003E\n\u003Cp\u003EØ成功进入Jenkins页面(如图2.3-4所示)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749545896844834927/99c9d42b_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.3-4Jenkins进入主界面示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9424-配置插件环境\" class=\"anchor\" href=\"#9424-%E9%85%8D%E7%BD%AE%E6%8F%92%E4%BB%B6%E7%8E%AF%E5%A2%83\"\u003E\u003C/a\u003E9.4.2.4 配置插件环境\u003C/h3\u003E\n\u003Cp\u003E由于Jenkins标准安装未包含Maven项目所需的完整支持需通过以下插件实现自动化构建能力\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E核心插件清单\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E·Maven Integration\u003C/strong\u003E 提供POM解析、生命周期控制等Maven原生支持\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E·Git Plugin\u003C/strong\u003E :实现代码仓库的版本控制与触发构建\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E·JDK Tool\u003C/strong\u003E 管理Java环境隔离与版本切换\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E部署策略\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E(二选一)使用\u003Cstrong\u003E服务器级\u003C/strong\u003E插件部署(这里系统基础建设这里不赘述)如图2.4-1非Jenkins页面安装优势包括\u003C/p\u003E\n\u003Cp\u003E·统一版本管控与运维规范对齐\u003C/p\u003E\n\u003Cp\u003E·避免Jenkins重启导致的插件依赖中断\u003C/p\u003E\n\u003Cp\u003E·支持离线环境下的稳定运行\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546506523239905/9e881a24_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-1插件安装成功示意图\u003C/p\u003E\n\u003Cp\u003E(二选一)也可使用 \u003Cstrong\u003EJenkins页面\u003C/strong\u003E安装\u003C/p\u003E\n\u003Cp\u003EØ点击如图2.4-2所示系统管理\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546527546946760/9afeed28_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-2Jenkins插件管理示意图\u003C/p\u003E\n\u003Cp\u003EØ点击插件管理\u003C/p\u003E\n\u003Cp\u003EØ依次搜索并下载核心插件, 如图2.4-3所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546538567906109/f205a86c_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-3Jenkins插件安装示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E配置验证\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003E需确保\u003C/p\u003E\n\u003Cp\u003E·插件已正确注册至Jenkins运行时环境\u003C/p\u003E\n\u003Cp\u003E·Jenkins全局工具配置中绑定对应二进制路径\u003C/p\u003E\n\u003Cp\u003EØ点击系统管理\u003C/p\u003E\n\u003Cp\u003EØ点击全局工具配置\u003C/p\u003E\n\u003Cp\u003EØ填写配置项maven和java以及git如图2.4-4至2.4-6所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546558645284447/f05eab1b_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-4配置Maven插件环境示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546607641027971/eac48283_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-5配置JAVA插件环境示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546626039905897/581224be_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.4-6配置Git插件环境示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9425-节点配置\" class=\"anchor\" href=\"#9425-%E8%8A%82%E7%82%B9%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.5 节点配置\u003C/h3\u003E\n\u003Cp\u003EØ点击系统管理如图2.5-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546729502084871/27894b90_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-1系统节点示意图\u003C/p\u003E\n\u003Cp\u003EØ点击节点和云管理\u003C/p\u003E\n\u003Cp\u003EØ点击新增节点New Node如图2.5-2所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546740447186091/be907b7a_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-2添加节点示意图\u003C/p\u003E\n\u003Cp\u003EØ依次添加集群节点信息如图2.5-3至2.5-4所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546751440052413/19f5064e_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-3系统节点配置示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546771091584697/4e9c8f53_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-4系统节点配置示意图\u003C/p\u003E\n\u003Cp\u003EØ点击保存\u003C/p\u003E\n\u003Cp\u003E最终节点列表效果如图2.5-5所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546780400417508/df2dac34_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.5-5系统节点列表示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9426-服务器ssh配置\" class=\"anchor\" href=\"#9426-%E6%9C%8D%E5%8A%A1%E5%99%A8ssh%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.6 服务器SSH配置\u003C/h3\u003E\n\u003Cp\u003EJenkins将通过SSH私钥的方式链接远程服务器。\u003C/p\u003E\n\u003Cp\u003EØ点击系统管理如图2.6-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749546960175838930/f5893cf4_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.6-1系统配置示意图\u003C/p\u003E\n\u003Cp\u003EØ点击系统配置\u003C/p\u003E\n\u003Cp\u003E找到Publish over SSH\u003C/p\u003E\n\u003Cp\u003EØ输入Passphrase私钥key如图2.6-2所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749690398190242654/a7533448_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.6-2服务器私钥配置示意图\u003C/p\u003E\n\u003Cp\u003EØ输入Path to key私钥文件的服务器路径.ssh/id_rsa\u003C/p\u003E\n\u003Cp\u003EØ输key私钥的完整文本内容\u003C/p\u003E\n\u003Cp\u003E找到SSH Servers\u003C/p\u003E\n\u003Cp\u003EØ依次添加服务器信息如图2.6-3所示\u003C/p\u003E\n\u003Cp\u003E例如\u003C/p\u003E\n\u003Cp\u003EName: 10.0.252.12\u003C/p\u003E\n\u003Cp\u003EHostname: 10.0.252.12\u003C/p\u003E\n\u003Cp\u003EUsername: root\u003C/p\u003E\n\u003Cp\u003EØ点击保存\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750320936031608586/d8d270ed_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.6-3服务器ssh配置示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9427-凭据配置\" class=\"anchor\" href=\"#9427-%E5%87%AD%E6%8D%AE%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.2.7 凭据配置\u003C/h3\u003E\n\u003Cp\u003E凭据配置是Jenkins用于访问远程链接所需要的凭据。\u003C/p\u003E\n\u003Cp\u003EØ点击系统管理-凭据管理-System-全局凭据 (unrestricted)-Add Credentials如图2.7-1\u003C/p\u003E\n\u003Cp\u003EØ填写用户名-密码-描述\u003C/p\u003E\n\u003Cp\u003EØ点击保存如图2.7-2\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749690575060067596/06948efa_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.7-1添加系统凭据示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749690588745374311/9dfdab75_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图2.7-2系统凭据配置示意图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"943-构建自由风格任务二选一\" class=\"anchor\" href=\"#943-%E6%9E%84%E5%BB%BA%E8%87%AA%E7%94%B1%E9%A3%8E%E6%A0%BC%E4%BB%BB%E5%8A%A1%E4%BA%8C%E9%80%89%E4%B8%80\"\u003E\u003C/a\u003E9.4.3 构建自由风格任务(二选一)\u003C/h2\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9431-新建文件夹管理\" class=\"anchor\" href=\"#9431-%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%E7%AE%A1%E7%90%86\"\u003E\u003C/a\u003E9.4.3.1 新建文件夹管理\u003C/h3\u003E\n\u003Cp\u003E该步骤是为了以项目的维度分类管理所有构建任务包括前端项目后端的项目等等,提升运维效率。\u003C/p\u003E\n\u003Cp\u003EØ点击新建任务如图3.1-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547127782960389/cfa464dc_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.1-1创建文件夹管理示意图\u003C/p\u003E\n\u003Cp\u003EØ输入任务名称智慧审计-test如图3.1-2所示\u003C/p\u003E\n\u003Cp\u003EØ类型选择文件夹\u003C/p\u003E\n\u003Cp\u003EØ点击确定\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547135818388113/c8f60c80_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.1-2创建文件夹任务示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9432-创建自由风格后端任务\" class=\"anchor\" href=\"#9432-%E5%88%9B%E5%BB%BA%E8%87%AA%E7%94%B1%E9%A3%8E%E6%A0%BC%E5%90%8E%E7%AB%AF%E4%BB%BB%E5%8A%A1\"\u003E\u003C/a\u003E9.4.3.2 创建自由风格后端任务\u003C/h3\u003E\n\u003Cp\u003EØ在新建的文件夹目录里左上角点击新建Item如图3.2-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547235559307671/df8d23f4_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-1创建后台项目示意图\u003C/p\u003E\n\u003Cp\u003EØ输入任务名称audit-back-sit如图3.2-2所示\u003C/p\u003E\n\u003Cp\u003EØ类型选择构建一个自由风格的软件项目\u003C/p\u003E\n\u003Cp\u003EØ点击确定\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547241796633457/f0351745_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.2-2创建后台项目示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9433-任务配置\" class=\"anchor\" href=\"#9433-%E4%BB%BB%E5%8A%A1%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.3.3 任务配置\u003C/h3\u003E\n\u003Cp\u003EØ输入项目描述如图3.3-1所示构建智慧审计后端SIT环境\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547289065017660/e7e93cd1_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-1任务描述配置示意图\u003C/p\u003E\n\u003Cp\u003EØ勾选丢弃旧的构建如图3.3-2所示\u003C/p\u003E\n\u003Cp\u003EØ填写保持构建的最大个数此项的目的是只保留构建的三个版本3\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547334025469631/e6cdfeca_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-2任务配置示意图\u003C/p\u003E\n\u003Cp\u003EØJDK选择jdk-8如图3.3-3所示\u003C/p\u003E\n\u003Cp\u003EØ勾选限制项目的运行节点作用是控制项目构建任务在指定的 Jenkins 节点Node上执行如图3.3-4所示\u003C/p\u003E\n\u003Cp\u003EØ标签表达式输入并选中agent_amd64_1\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547401560594221/7ae22df2_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-3构建配置示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547422080270900/96f781bc_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-4构建节点配置示意图\u003C/p\u003E\n\u003Cp\u003EØ源码管理选择Git如图3.3-5所示\u003C/p\u003E\n\u003Cp\u003EØ Repository URL输入代码仓库地址\u003Ca href=\"https://fcd.gdyditc.com/itc/ZHSJ/back.git\"\u003Ehttps://fcd.gdyditc.com/itc/ZHSJ/back.git\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ Credentials资格证明选择拥有该仓库权限的用户,点击“+”号可手动添加用户如yangjiewei\u003C/p\u003E\n\u003Cp\u003EØ 指定分支输入:*/dev\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547461135567847/e2248484_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-5 Git配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 触发器选择轮询SCM如图3.3-6所示\u003C/p\u003E\n\u003Cp\u003EØ 输入Cron表达式H(0-29) 12,18 * * *\u003C/p\u003E\n\u003Cp\u003E每天12:00和18:00之间的随机时间点执行(0-29分)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547481232188863/3e6d044e_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-6 触发器配置示意图\u003C/p\u003E\n\u003Cp\u003E添加构建步骤,这里总共有两个类型步骤。\u003C/p\u003E\n\u003Cp\u003EØ 步骤1点击增加构建步骤如图3.3-7所示\u003C/p\u003E\n\u003Cp\u003EØ 选择步骤类型调用顶层Maven目标\u003C/p\u003E\n\u003Cp\u003EØ 选择Maven版本maven-3.9.9如图3.3-8所示\u003C/p\u003E\n\u003Cp\u003EØ 填写目标clean install -U -Dmaven.test.skip=true\u003C/p\u003E\n\u003Cp\u003E(主要用于清理项目并安装依赖,同时跳过测试)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547506031492265/3711067c_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-7 添加maven步骤示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547516815794270/894adc32_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-8 maven步骤配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 步骤2点击增加构建步骤如图3.3-9所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547665568603391/5c9cb2fa_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-9 SSH步骤配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 选择步骤类型Send files or execute commands over SSH\u003C/p\u003E\n\u003Cp\u003EØ 选择Name10.4.126.62如图3.3-10所示\u003C/p\u003E\n\u003Cp\u003E(部署的远程服务器地址)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547680261588320/cc12db44_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-10 服务步骤配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 填写Source filestarget/audit-0.0.1-SNAPSHOT.jar\u003C/p\u003E\n\u003Cp\u003E(指定需要传输到远程服务器的本地文件路径)\u003C/p\u003E\n\u003Cp\u003EØ 填写Remove prefixtarget\u003C/p\u003E\n\u003Cp\u003E(移除指定的前缀路径)\u003C/p\u003E\n\u003Cp\u003EØ 填写Remote directory/data/apps/audit-ma-sit\u003C/p\u003E\n\u003Cp\u003E(文件传输到远程服务器的目标目录)\u003C/p\u003E\n\u003Cp\u003EØ 填写Exec command(文件传输完成后在远程服务器上执行的Shell 命令,如图3.3-11所示),命令如下:\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Emkdir -p /data/apps/audit-ma-sit\ncd /data/apps/audit-ma-sit\ncat \u0026lt;\u0026lt;\\EOF | tee deploy.sh\n#!/usr/bin/env bash\nsource /etc/profile\nDIR_PATH=\"/data/apps/audit-ma-sit\"\nSOURCE_JAR=\"audit-0.0.1-SNAPSHOT.jar\"\nTARGET_JAR=\"audit-ma-sit.jar\"\nPROJECT_ARGS=\"--spring.profiles.active=test --server.port=8080\"\nLOG_NAME=\"audit-ma-sit.log\"\nstop_process() {\n echo \"将结束 $TARGET_JAR 的进程\"\n pkill -9 -f $TARGET_JAR\n if [ $? -eq 0 ];then\n echo \"$TARGET_JAR 关闭成功\"\n else\n echo \"$TARGET_JAR 未启动\"\n fi\n}\npost_process() {\n if [ -e $TARGET_JAR ];then\n echo \"备份原包 $TARGET_JAR\"\n# mv $TARGET_JAR $TARGET_JAR$(date \"+%Y%m%d%H%M%S\")\n rm ${TARGET_JAR}.bak\n mv $TARGET_JAR ${TARGET_JAR}.bak\n fi\n mv $SOURCE_JAR $TARGET_JAR\n}\nstart_process() {\n nohup java -jar $TARGET_JAR $PROJECT_ARGS \u0026amp;\u0026gt;/dev/null \u0026amp;\n if [ $? -eq 0 ];then\n echo \"$TARGET_JAR 启动成功\"\n else\n echo \"$TAR_NAME 启动失败\"\n fi\n}\ncheckout() {\n if [ ! -e $SOURCE_JAR ];then\n echo \"没找到 $SOURCE_JAR\"\n exit\n fi\n}\ncd $DIR_PATH\ncheckout\nstop_process\npost_process\nstart_process\nEOF\nchmod +x deploy.sh\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E上述命令的执行效果如下\u003C/p\u003E\n\u003Cp\u003E·创建 /data/apps/audit-ma-sit 目录(如果不存在)。\u003C/p\u003E\n\u003Cp\u003E·生成 deploy.sh 部署脚本,实现:\u003C/p\u003E\n\u003Cp\u003E·检查新构建的 audit-0.0.1-SNAPSHOT.jar 是否存在。\u003C/p\u003E\n\u003Cp\u003E·停止当前运行的 audit-ma-sit.jar 进程。\u003C/p\u003E\n\u003Cp\u003E·备份旧jar 包(重命名为 .bak。\u003C/p\u003E\n\u003Cp\u003E·替换新jar 包并启动。\u003C/p\u003E\n\u003Cp\u003E·赋予 deploy.sh 可执行权限,方便后续直接运行。\u003C/p\u003E\n\u003Cp\u003E这样每次 Jenkins 构建完成后,只需执行 ./deploy.sh 即可完成自动化部署。\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547696999030963/1be72dc5_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-11 Shell脚本配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 在该步骤下方继续点击: Add Server如图3.3-12所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547759895097547/c7c1f8a5_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-12 步骤配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 选择Name(远程服务器地址)10.4.126.62如图3.3-13所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547769637542057/68fa6a82_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-13 服务配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 填写Exec command(在远程服务器上执行的Shell 命令)\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Ecd /data/apps/audit-ma-sit\n./deploy.sh\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E上述命令的执行效果如下\u003C/p\u003E\n\u003Cp\u003E·进入指定目录\u003C/p\u003E\n\u003Cp\u003E·执行deploy.sh脚本命令\u003C/p\u003E\n\u003Cp\u003EØ 最后点击保存如图3.3-14所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547793032343061/5d3e0bc9_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-14 保存配置示意图\u003C/p\u003E\n\u003Cp\u003EØ可选可手动点击启动构建如图3.3-15所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547822694666792/3f45c6ee_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-15 启动构建任务示意图\u003C/p\u003E\n\u003Cp\u003EØ (可选)点击查看项目的启动日志:控制台输出如图3.3-16至3.3-17所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547843104329253/d615c11a_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-16 任务日志查看示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749547853369485593/2a0a0644_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图3.3-17 任务日志查看示意图\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"944-构建流水线任务二选一\" class=\"anchor\" href=\"#944-%E6%9E%84%E5%BB%BA%E6%B5%81%E6%B0%B4%E7%BA%BF%E4%BB%BB%E5%8A%A1%E4%BA%8C%E9%80%89%E4%B8%80\"\u003E\u003C/a\u003E9.4.4 构建流水线任务(二选一)\u003C/h2\u003E\n\u003Cp\u003EJenkins 流水线构建Pipeline和自由风格构建Freestyle的区别\u003C/p\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\n\u003Ctr\u003E\n\u003Cth\u003E维度\u003C/th\u003E\n\u003Cth\u003E流水线构建Pipeline\u003C/th\u003E\n\u003Cth\u003E自由风格构建Freestyle\u003C/th\u003E\n\u003C/tr\u003E\n\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E配置存储位置\u003C/td\u003E\n\u003Ctd\u003EJenkinsfile存储在代码仓库如Git\u003C/td\u003E\n\u003Ctd\u003E配置保存在Jenkins服务器本地\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E灵活性\u003C/td\u003E\n\u003Ctd\u003E高支持复杂逻辑、条件判断、并行任务\u003C/td\u003E\n\u003Ctd\u003E低仅支持简单线性步骤\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E版本控制\u003C/td\u003E\n\u003Ctd\u003E与代码同仓库追溯变更历史,进行控制、审核和迭代\u003C/td\u003E\n\u003Ctd\u003E无版本控制需手动备份\u003C/td\u003E\n\u003C/tr\u003E\n\u003Ctr\u003E\n\u003Ctd\u003E适用场景\u003C/td\u003E\n\u003Ctd\u003E复杂CI/CD流程多环境、微服务\u003C/td\u003E\n\u003Ctd\u003E简单任务单次构建、定时执行\u003C/td\u003E\n\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003E表4-1 Pipeline和Freestyle区别说明表\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9441-新建文件夹管理\" class=\"anchor\" href=\"#9441-%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%E7%AE%A1%E7%90%86\"\u003E\u003C/a\u003E9.4.4.1 新建文件夹管理\u003C/h3\u003E\n\u003Cp\u003E该步骤是为了以项目的维度分类管理所有构建任务包括前端项目后端的项目等等,提升运维效率。\u003C/p\u003E\n\u003Cp\u003EØ点击新建任务如图4.1-1所示\u003C/p\u003E\n\u003Cp\u003EØ输入任务名称智慧审计-test如图4.1-2所示\u003C/p\u003E\n\u003Cp\u003EØ类型选择文件夹\u003C/p\u003E\n\u003Cp\u003EØ点击确定\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720085131882445/fa449a28_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.1-1创建文件夹管理示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720092476897756/68ced72e_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.1-2创建文件夹任务示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9442-创建流水线后端任务\" class=\"anchor\" href=\"#9442-%E5%88%9B%E5%BB%BA%E6%B5%81%E6%B0%B4%E7%BA%BF%E5%90%8E%E7%AB%AF%E4%BB%BB%E5%8A%A1\"\u003E\u003C/a\u003E9.4.4.2 创建流水线后端任务\u003C/h3\u003E\n\u003Cp\u003EØ在新建的文件夹目录里左上角点击新建Item如图4.2-1所示\u003C/p\u003E\n\u003Cp\u003EØ输入任务名称audit-back-sit如图4.2-2所示\u003C/p\u003E\n\u003Cp\u003EØ类型选择流水线\u003C/p\u003E\n\u003Cp\u003EØ点击确定\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720156882998140/3e4ee8a9_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.2-1创建后台项目示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720163428208756/d8bbaa8c_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.2-2创建后台项目示意图\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9443-任务配置\" class=\"anchor\" href=\"#9443-%E4%BB%BB%E5%8A%A1%E9%85%8D%E7%BD%AE\"\u003E\u003C/a\u003E9.4.4.3 任务配置\u003C/h3\u003E\n\u003Cp\u003EØ输入项目描述如图4.3-1所示构建智慧审计后端SIT环境\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720236307593277/65e8b75f_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-1任务配置示意图\u003C/p\u003E\n\u003Cp\u003EØ勾选丢弃旧的构建如图4.3-2所示\u003C/p\u003E\n\u003Cp\u003EØ填写保持构建的最大个数此项的目的是只保留构建的三个版本3\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720260196557335/f6d6c3ee_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-2任务配置示意图\u003C/p\u003E\n\u003Cp\u003EØ 触发器选择轮询SCM如图4.3-3所示\u003C/p\u003E\n\u003Cp\u003EØ 输入Cron表达式H(0-29) 12,18 * * *\u003C/p\u003E\n\u003Cp\u003E每天12:00和18:00之间的随机时间点执行(0-29分)\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720287847347066/526de9df_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-3任务配置示意图\u003C/p\u003E\n\u003Cp\u003E流水线定义选择 Pipline script from SCM是指定一个代码仓库如Git、SVN中的脚本文件路径, 如果选择Pipline script则是直接在文本框中编写Pipeline脚本Groovy代码。这里Pipeline script from SCM 支持两种方式加载 Jenkinsfile\u003C/p\u003E\n\u003Cp\u003E1、Jenkinsfile\n与项目代码同仓库可以将Jenkinsfile放在项目的根目录如图4.3-8所示\u003C/p\u003E\n\u003Cp\u003E2、Jenkinsfile\n与项目代码不同仓库页面配置 Jenkinsfile 所在的 Git 仓库地址,并在 Jenkinsfile 内容里通过\ncheckout scm 或 git 命令拉取项目代码。这里我们选择第二种)\u003C/p\u003E\n\u003Cp\u003EØ 流水线定义选择(如图4.3-4所示)Pipline script from SCM\u003C/p\u003E\n\u003Cp\u003EØ SCM选择(如图所示)Git\u003C/p\u003E\n\u003Cp\u003EØ Repository URL输入Jenkinsfile的仓库地址需要创建对应的Jenkinsfile仓库如图4.3-5至4.3-7所示\u003Ca href=\"https://fcd.gdyditc.com/practice/jenkins-pipeline.git\"\u003Ehttps://fcd.gdyditc.com/practice/jenkins-pipeline.git\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003EØ Credentials资格证明选择拥有该仓库权限的用户,点击“+”号可手动添加用户如18565418931\u003C/p\u003E\n\u003Cp\u003EØ 指定分支输入Jenkinsfile的仓库的分支*/dev\u003C/p\u003E\n\u003Cp\u003EØ 脚本路径Jenkinsfile的仓库内的相对路径sit/audit-back/Jenkinsfile-sit\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720442217125252/7b80f310_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-4任务配置示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720450875255129/73502f46_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-5任务配置示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720461649722615/a9d1bb02_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-6Jenkinsfile所在Git目录示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720469022940024/f8066c15_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-7Jenkinsfile所在Git目录示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1750322468339883638/cf8fad95_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-8Jenkinsfile所在项目目录示意图\u003C/p\u003E\n\u003Cp\u003EØ最后点击保存如图4.3-9所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720501294726132/0835248a_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-9保存示意图\u003C/p\u003E\n\u003Cp\u003EØ可选可手动点击启动构建如图4.3-10所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720526306401432/a69db612_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-10 启动构建任务示意图\u003C/p\u003E\n\u003Cp\u003EØ (可选)点击查看项目的启动日志:控制台输出如图4.3-11至4.3-12所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720550206214136/a84804ec_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-11任务日志查看示意图\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749720556729140993/c5aef073_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.3-12 任务日志查看示意图\u003C/p\u003E\n\u003Cp\u003EØ至此流水线的配置已经完成接下来就是调试Jenkinsfile脚本文件。\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"9444-构建脚本说明\" class=\"anchor\" href=\"#9444-%E6%9E%84%E5%BB%BA%E8%84%9A%E6%9C%AC%E8%AF%B4%E6%98%8E\"\u003E\u003C/a\u003E9.4.4.4 构建脚本说明\u003C/h3\u003E\n\u003Cp\u003E这里提供两种Jenkinsfile构建方案设计\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E一体化构建方案\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003E将所有构建流程如创建目录、生成部署脚本、检查、停止、备份、替换、赋权及执行脚本等集中编写在Jenkinsfile中实现全流程自动化管控。\u003C/p\u003E\n\u003Cp\u003EJenkinsfile脚本示例\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Epipeline {\n agent any\n \n // 环境变量定义\n environment {\n DEPLOY_DIR = \"/data/apps/audit-ma-sit\"\n SOURCE_JAR = \"audit-0.0.1-SNAPSHOT.jar\"\n TARGET_JAR = \"audit-ma-sit.jar\"\n JAVA_ARGS = \"--spring.profiles.active=test --server.port=8080\"\n DEPLOY_USER = \"deploy-user\" //目标服务器用户名\n DEPLOY_SERVER = \"10.4.126.62\" //目标服务器IP\n SSH_CREDENTIALS = \"deploy-ssh-key\" // Jenkins中配置的SSH凭据ID\n }\n \n triggers {\n pollSCM('H * * * *')\n }\n \n options {\n gitConnection('https://fcd.gdyditc.com/itc/ZHSJ/back.git')\n timeout(time: 15, unit: 'MINUTES') // 构建超时设置\n }\n\n stages {\n stage('初始化部署环境') {\n steps {\n // 本地生成部署脚本(同原逻辑)\n sh \"\"\"\n mkdir -p ${DEPLOY_DIR}\n cd ${DEPLOY_DIR}\n cat \u0026lt;\u0026lt;'EOF' \u0026gt; deploy.sh\n #!/bin/bash\n DIR_PATH=\"${DEPLOY_DIR}\"\n SOURCE_JAR=\"${SOURCE_JAR}\"\n TARGET_JAR=\"${TARGET_JAR}\"\n PROJECT_ARGS=\"${JAVA_ARGS}\"\n \n stop_process() {\n echo \"[$(date)] Stopping \\${TARGET_JAR}...\"\n pkill -9 -f \\${TARGET_JAR} || echo \"Service not running\"\n }\n post_process() {\n [ -f \\${TARGET_JAR} ] \u0026amp;\u0026amp; \\\\\n mv \\${TARGET_JAR} \\${TARGET_JAR}.bak \u0026amp;\u0026amp; \\\\\n echo \"Backup created: \\${TARGET_JAR}.bak\"\n }\n start_process() {\n nohup java -jar \\${TARGET_JAR} \\${PROJECT_ARGS} \u0026gt; console.log 2\u0026gt;\u0026amp;1 \u0026amp;\n [ \\$? -eq 0 ] \u0026amp;\u0026amp; \\\\\n echo \"Started! PID: \\$(pgrep -f \\${TARGET_JAR})\" || \\\\\n echo \"Failed!\"\n }\n cd \\${DIR_PATH}\n [ ! -f \\${SOURCE_JAR} ] \u0026amp;\u0026amp; { echo \"Error: \\${SOURCE_JAR} missing\"; exit 1; }\n stop_process\n post_process\n mv \\${SOURCE_JAR} \\${TARGET_JAR}\n start_process\n EOF\n chmod +x deploy.sh\n \"\"\"\n }\n }\n\n stage('传输部署包') {\n steps {\n // 使用SSH Agent插件安全传输\n sshagent(credentials: [SSH_CREDENTIALS]) {\n sh \"\"\"\n # 打包本地文件\n tar -czf ${TARGET_JAR}.tar.gz -C ${DEPLOY_DIR} .\n \n # 传输到目标服务器\n scp -o StrictHostKeyChecking=no \\\n ${TARGET_JAR}.tar.gz \\\n ${DEPLOY_USER}@${DEPLOY_SERVER}:/tmp/\n \n # 远程解压并执行\n ssh -o StrictHostKeyChecking=no \\\n ${DEPLOY_USER}@${DEPLOY_SERVER} \"\n mkdir -p ${DEPLOY_DIR}\n tar -xzf /tmp/${TARGET_JAR}.tar.gz -C ${DEPLOY_DIR}\n cd ${DEPLOY_DIR} \u0026amp;\u0026amp; ./deploy.sh\n rm -f /tmp/${TARGET_JAR}.tar.gz\n \"\n \"\"\"\n }\n }\n }\n }\n\n post {\n success {\n slackSend(color: 'good', \n message: \"SUCCESS: ${JOB_NAME} deployed to ${DEPLOY_SERVER}\")\n sh \"\"\"\n echo \"Deployment validated:\" \n ssh ${DEPLOY_USER}@${DEPLOY_SERVER} \\\n \\\"pgrep -f ${TARGET_JAR} \u0026amp;\u0026amp; curl -s http://localhost:8080/health\\\"\n \"\"\"\n }\n failure {\n slackSend(color: 'danger', \n message: \"FAILED: ${JOB_NAME} - Check ${BUILD_URL}\")\n }\n always {\n // 清理临时文件\n sh \"rm -f ${DEPLOY_DIR}/${TARGET_JAR}.tar.gz\"\n }\n }\n}\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E2.模块化构建方案\u003C/p\u003E\n\u003Cp\u003E将启动脚本独立拆分至项目代码库支持按服务粒度定制或参数化调用Jenkinsfile仅负责调度执行提升灵活性与可维护性。\u003C/p\u003E\n\u003Cp\u003EØ这里Jenkinsfile的脚本命令将通过远程执行命令所以Jenkins服务器需要下载相应插件下载命令sudo yum install sshpass\u003C/p\u003E\n\u003Cp\u003EJenkinsfile脚本示例\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003Enode(\"agent_amd64_1\"){\n // 构建前清理工作空间\n\tstep([$class: 'WsCleanup'])\n\n\t// 1工程名服务名\n\tdef project_name='audit-back'\n\t// 2工程部署目标服务器ip自己linux机器地址\n\tdef deploy_ip='10.4.126.63'\n\t// 3工程启动端口\n\tdef port='8080'\n\t// 4环境标识\n\tdef env='dev'\n\n\n//5这里要改标识码和仓库路径\n\tstage('Checkout') {\n\t checkout([$class: 'GitSCM', branches: [[name: '*/dev']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'f0c86da7-7d54-4f77-aedf-31fe43b51fbe',url: 'https://fcd.gdyditc.com/itc/ZHSJ/back.git']]])\n\t}\n// 跳过测试打包\n\tstage('Archive Artefact') {\n \t\t sh \"mvn package -Dmaven.test.skip=true\"\n\n//6 这里要改服务器的标识码\n\twithCredentials([usernamePassword(credentialsId:'7d49d98-8e4a-4e5b-acb4-6e0bb5010e7', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){\n\t stage(\"Deploy to $env\") {\n\t\t // 清理目标服务器旧文件\n sh \"sshpass -p $PASSWORD ssh $USERNAME@$deploy_ip \\\" rm -rf /home/$USERNAME/$project_name \\\" \"\n // 本地打包\n\t\t\t sh \"mkdir $project_name\"\n sh \"cp ./target/*.jar $project_name\"\n sh \"cp ./script/startup.sh $project_name\"\n sh \"tar -cvf $project_name'.tar' $project_name \"\n\t\t\t\t // 传输并解压\n sh \"sshpass -p $PASSWORD scp $project_name*.tar $USERNAME@$deploy_ip:/home/$USERNAME/ \"\n sh \"sshpass -p $PASSWORD ssh $USERNAME@$deploy_ip \\\"cd /home/$USERNAME;tar -xvf $project_name*.tar \\\" \"\n sh \"sshpass -p $PASSWORD ssh $USERNAME@$deploy_ip \\\"cd /home/$USERNAME;rm -f $project_name*.tar \\\" \"\n // 启动服务防止Jenkins杀死进程\n\t\t\t\twithEnv(['JENKINS_NODE_COOKIE=dontKillMe']) {\n\t\t\t\t//这里调用启动脚本传入两个参数\n sh \"sshpass -p $PASSWORD ssh $USERNAME@$deploy_ip \\\"cd /home/$USERNAME/$project_name; chmod +x startup.sh;/bin/bash -l startup.sh $env $port \\\" \"\n }\n\t }\n\t}\n}\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003EØ上述的Jenkinsfile调用了一个启动脚本startup.sh启动脚本所在的项目位置参考下图4.4-1所示\u003C/p\u003E\n\u003Cp\u003E\u003Cimg src=\"https://foruda.gitee.com/images/1749721579461150319/ba616128_15898786.png\" alt=\"image.png\"\u003E\u003C/p\u003E\n\u003Cp\u003E图4.4-1 startup.sh脚本所在目录示意图\u003C/p\u003E\n\u003Cp\u003Estartup.sh启动脚本示例\u003C/p\u003E\n\u003Cdiv class=\"markdown-code-block\"\u003E\n\u003Cpre\u003E\u003Ccode\u003E#!/usr/bin/env bash\n\nprojectName=audit-back\ntarget=$1\nport=$2\n\nhealth_url=\"http://127.0.0.1:$port/actuator/health\"\n\necho \"target = \"$target\n\npid=`ps -ef |grep 'java' |grep $projectName |grep $port |awk '{print $2}'`\nif [ -n \"$pid\" ]; then\n kill -9 $pid\n sleep 3\nfi\n\ncase $target in\n dev)\n JAVA_OPTS=\"-Xms512m -Xmx512m -Xss256k -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:SurvivorRatio=8\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:../logs/$projectName/gc.log\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/$projectName/dump\"\n JAVA_OPTS=\"$JAVA_OPTS -Dspring.profiles.active=$target -Dserver.port=$port \"\n nohup java -jar $JAVA_OPTS $projectName*.jar \u0026gt; /dev/null \u0026amp;\n ;;\n sit | tag)\n JAVA_OPTS=\"-Xms512m -Xmx512m -Xss256k -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:SurvivorRatio=8\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:../logs/$projectName/gc.log\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/$projectName/dump\"\n JAVA_OPTS=\"$JAVA_OPTS -Dspring.profiles.active=$target -Dserver.port=$port \"\n nohup java -jar $JAVA_OPTS $projectName*.jar \u0026gt; /dev/null \u0026amp;\n ;;\n uat)\n JAVA_OPTS=\"-Xms1024m -Xmx1024m -Xss256k -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:SurvivorRatio=8\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/logs/$projectName/gc.log\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=..logs/$projectName/dump\"\n JAVA_OPTS=\"$JAVA_OPTS -Dspring.profiles.active=uat -Dserver.port=$port \"\n nohup java -jar $JAVA_OPTS $projectName*.jar \u0026gt; /dev/null \u0026amp;\n ;;\n prod)\n JAVA_OPTS=\"-Xms2048m -Xmx2048m -Xss256k -Xmn256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=384m -XX:SurvivorRatio=8\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:../logs/$projectName/gc.log\"\n JAVA_OPTS=\"$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/$projectName/dump\"\n JAVA_OPTS=\"$JAVA_OPTS -Dspring.profiles.active=$target -Dserver.port=$port \"\n nohup java -jar $JAVA_OPTS $projectName*.jar \u0026gt; /dev/null \u0026amp;\n ;;\n *)\n echo \"No this ENV:$target.\"\n exit 1\n ;;\nesac\n\n\nsleep 20\nfor ((i=0;i\u0026lt;20;i++))\ndo\n curl -s ${health_url} \u0026gt; health\n state=`cat health |grep status |grep UP`\n if [ ${#state} -gt 10 ]; then\n break\n else\n echo \"Waiting for start ...\"\n sleep 5\n fi\ndone\nif [ ${#state} -gt 10 ]; then\n echo \"Deploy Success\"\n exit 0\nelse\n echo \"Deploy Fail\"\n exit 1\nfi\n\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cdiv class=\"markdown-code-block-copy-btn\"\u003E\u003C/div\u003E\n\u003C/div\u003E\n\u003Cp\u003E上述startup.sh启动脚本内容如下\u003C/p\u003E\n\u003Col\u003E\n\u003Cli\u003E基本参数设置\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003EprojectName: 项目名称,这里是 audit-back。\u003C/p\u003E\n\u003Cp\u003Etarget: 第一个参数,表示部署的目标环境(如 dev、sit、uat、prod 等)。\u003C/p\u003E\n\u003Cp\u003Eport: 第二个参数,表示项目启动的端口号。\u003C/p\u003E\n\u003Cp\u003Ehealth_url: 健康检查的 URL用于检测项目是否成功启动基于 Spring Boot Actuator 的 /health 端点)\u003C/p\u003E\n\u003Col start=\"2\"\u003E\n\u003Cli\u003E停止已有进程\u003C/li\u003E\n\u003Cli\u003E根据环境启动项目\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003EJVM 配置:\u003C/p\u003E\n\u003Cp\u003E堆内存-Xms512m -Xmx512m初始和最大堆内存均为 512MB。\u003C/p\u003E\n\u003Cp\u003E线程栈-Xss256k。\u003C/p\u003E\n\u003Cp\u003E年轻代-Xmn256m。\u003C/p\u003E\n\u003Cp\u003E元空间-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m。\u003C/p\u003E\n\u003Cp\u003E垃圾回收使用 CMS 收集器(-XX:+UseConcMarkSweepGC并打印 GC 日志。\u003C/p\u003E\n\u003Cp\u003EOOM 时生成堆转储文件。\u003C/p\u003E\n\u003Cp\u003ESpring 配置:\u003C/p\u003E\n\u003Cp\u003E激活指定的 Profile-Dspring.profiles.active=$target。\u003C/p\u003E\n\u003Cp\u003E设置服务端口-Dserver.port=$port。\u003C/p\u003E\n\u003Cp\u003E通过 nohup 后台启动项目,并将日志输出到 /dev/null丢弃日志\u003C/p\u003E\n\u003Col start=\"4\"\u003E\n\u003Cli\u003E健康检查\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003E等待 20 秒后,开始检查健康状态。\u003C/p\u003E\n\u003Cp\u003E循环最多 20 次,每次间隔 5 秒,通过 curl 访问 health_url。\u003C/p\u003E\n\u003Cp\u003E如果响应中包含 UP 状态,则认为启动成功,退出循环。\u003C/p\u003E\n\u003Col start=\"5\"\u003E\n\u003Cli\u003E结果判断。\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003Estartup.sh启动脚本功能总结\u003C/p\u003E\n\u003Cp\u003E停止旧进程确保端口和项目无冲突。\u003C/p\u003E\n\u003Cp\u003E动态配置根据环境dev/sit/uat/prod调整 JVM 参数。\u003C/p\u003E\n\u003Cp\u003E启动项目后台运行 Java 服务。\u003C/p\u003E\n\u003Cp\u003E健康检查通过 Actuator 接口验证服务是否就绪。\u003C/p\u003E\n\u003Ch2\u003E\n\u003Ca id=\"945-结语\" class=\"anchor\" href=\"#945-%E7%BB%93%E8%AF%AD\"\u003E\u003C/a\u003E9.4.5 结语\u003C/h2\u003E\n\u003Cp\u003E当前 Jenkins 自动化部署流水线已完成全链 路配置,系统将按以下机制运行:\u003C/p\u003E\n\u003Cp\u003EØ 定时构建:每日通过 Poll SCM 自动轮询代码仓库变更配置频率H(0-29) 12,18 * * *\u003C/p\u003E\n\u003Cp\u003EØ 事件触发:支持 Git Webhook 实时触发代码更新部署\u003C/p\u003E\n\u003Cp\u003EØ 版本追溯:每次构建关联 Git Commit ID 与制品版本\u003C/p\u003E\n\u003Cp\u003E后续开发人员可基于此环境\u003C/p\u003E\n\u003Cp\u003EØ 按需创建微服务/前后端构建任务\u003C/p\u003E\n\u003Cp\u003EØ 参考本文档的权限管理及流水线设计规范\u003C/p\u003E\n\u003Cp\u003E如需扩展部署场景或调整流程请联系 DevOps 团队协同优化。\u003C/p\u003E","13882351":"\u003Ch3\u003E\n\u003Ca id=\"101-权限问题\" class=\"anchor\" href=\"#101-%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98\"\u003E\u003C/a\u003E10.1 权限问题\u003C/h3\u003E\n\u003Cp\u003EQ: 如何配置接口权限?\nA: 在Controller方法上添加@SaCheckPermission注解\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"102-数据源问题\" class=\"anchor\" href=\"#102-%E6%95%B0%E6%8D%AE%E6%BA%90%E9%97%AE%E9%A2%98\"\u003E\u003C/a\u003E10.2 数据源问题\u003C/h3\u003E\n\u003Cp\u003EQ: 如何配置多数据源?\nA: 在application.yml中配置多数据源,并在Service上使用@DS注解\u003C/p\u003E\n\u003Ch3\u003E\n\u003Ca id=\"103-缓存问题\" class=\"anchor\" href=\"#103-%E7%BC%93%E5%AD%98%E9%97%AE%E9%A2%98\"\u003E\u003C/a\u003E10.3 缓存问题\u003C/h3\u003E\n\u003Cp\u003EQ: 如何使用Redis缓存?\nA: 使用@Cacheable注解或RedisTemplate\u003C/p\u003E","13882352":"\u003Cp\u003E.keep\u003C/p\u003E","13882356":"\u003Ch3\u003E\n\u003Ca id=\"v201-2024-03-31\" class=\"anchor\" href=\"#v201-2024-03-31\"\u003E\u003C/a\u003Ev2.0.1 (2024-03-31)\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E新增ChatGPT集成\u003C/li\u003E\n\u003Cli\u003E优化代码生成器\u003C/li\u003E\n\u003Cli\u003E修复已知问题\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003E\n\u003Ca id=\"v200-2024-02-26\" class=\"anchor\" href=\"#v200-2024-02-26\"\u003E\u003C/a\u003Ev2.0.0 (2024-02-26)\u003C/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E升级Spring Boot到2.7.5\u003C/li\u003E\n\u003Cli\u003E升级MyBatis-Plus到3.5.1\u003C/li\u003E\n\u003Cli\u003E新增工作流引擎\u003C/li\u003E\n\u003C/ul\u003E"}}</script>