众望通科技 研发中心
YOUFOOL-INCREPACK 架构设计
[TOC] ## 1 项目说明 YOUFOOL-INCREPACK是一个管理补丁发布的 **工具链**。主要为了解决 **开发环境** 与 **实施环境** 网络隔离情况下,规范Web应用中补丁的升级,同时为Web应用添加校验机制,未经授权的修改无法部署到Web应用中,规范了实施环境的管理。 ## 2 主要功能 * 根据配置生成指定范围增量补丁文件; * 版本管理自动化,对版本号形成强约束管理; * 向补丁发放授权; * 补丁升级过程自动化:补丁下载、解压、备份、覆盖、系统关停、启动、升级成功检测; * Web中间件启动过程校验,未经授权的文件无法部署启动。 ## 3 技术设计 ![输入图片说明](./youfool-increpack-framework.png "YOUFOOL-INCREPACK 架构示意图") YOUFOOL-INCREPACK由四个部分组成: * PMS * Increpack-maven-plugin * Increpack-client * Increpack-interceptor ### 3.1 PMS 项目管理系统,闭环管理的角色,升级流程的起点与终点: * 发布的补丁的授权文件,设定版本逐级发布的链路(链路节点参与补丁授权),最后接收现场升级后的完成信息,作为版本发布的闭环节点; * 负责所有系统版本发布信息的管理; * 负责所有系统的License管理; ### 3.2 Increpack-maven-plugin Maven插件,只适用在Maven管理的开发项目中,Package阶段完成补丁的打包。配置 `Git` 仓库信息、Revision信息和版本号信息后,生成特定版本号样式的补丁。 > 补丁名称样例:*aicods_gz-1.0.12-RELEASE-r252.200504.zip* #### 3.2.1 补丁文件结构 * 工程文件,目录结构遵循约定,与部署环境一致 * incre_config 目录专门存放配置文件信息 * auth文件,补丁的授权信息 * version.json文件,补丁的版本信息 * README.txt文件,补丁的描述信息 #### 3.2.2 版本号说明 补丁版本号示例: ` youfool-pms_v1.0.12_c6303209da_20201011 ` * 项目名称:youfool-pms,按照约定,与POM中 artifactId 一致; * 版本号: v1.0.12,编号规则(严格递增): `MajorVersionNumber.MinorVersionNumber.BugFixNumber` 1. `MajorVersionNumber`,主版本号,项目发生重大升级时递增 2. `MinorVersionNumber`,子版本号,项目进行需求变动升级时递增 3. `BugFixNumber`,修正版本号,项目进行Bug修复时递增 * 代码版本号:c6303209da,对应 `GIT` 的 commit SHA-1 编号,增量补丁截止的版本 * 时间序列号:20201011,打包操作的时间描述,2020年10月11日 ### 3.3 Increpack-client 客户端负责工具,由实施人员操作。主要用于辅助实施人员完成补丁的升级、回退和一些简单的系统管理功能。具体功能有: * 补丁授权的校验 * 补丁版本号校验 * 执行补丁文件的覆盖与备份 * 往实施环境写入授权信息 * 应用系统的关闭与启动 * 系统可用性检测 ### 3.4 Increpack-interceptor Web容器拦截器,用于Web容器启动时进行授权校验: * 计算环境中应用文件的Hash信息是否与auth授权数据一致,如果出现不一致,认为应用文件被篡改,中断系统启动过程; * 应用的license校验; * 系统启动的消息发布,发布渠道:企业微信和应用自带的版本发布消息模块。 ## 4 版本发布流程 ### 4.1 版本发布服务器 ### 4.2 分支管理 ### 4.3 版本号管理 ## 5 配置说明 ### 5.1 工程配置说明 #### 5.1.1 POM配置 1. 引入依赖youfool-increpack-maven-plugin ```xml com.chinaweal.youfool youfool-increpack-maven-plugin 2.0.0-SNAPSHOT ``` 2. 在build.plugins节点下配置需要用到的插件(直接拷贝即可) ```xml org.apache.maven.plugins maven-assembly-plugin 3.3.0 ${project.artifactId} target/assembly.xml make-assembly package single org.codehaus.mojo exec-maven-plugin 1.6.0 compile java com.chinaweal.youfool.increpack.maven.IncrePackMain ${project.artifactId} ${project.version} false authMac package java com.chinaweal.youfool.increpack.common.AuthPackMain ``` #### 5.1.2 increpack.xml配置 文件放置在Maven工程根目录 ```XML http://172.22.80.91:8086/control/upgradeRecord/getUpgradeByAppIdAndCodeId d789d196fdb40bdb2df321216da192ff e53514c7330d9ccbe701a26cf0803243 git http://47.107.61.133:3000/chinaweal/fsrl-server.git D:\chinaweal\gitea-code\fsrl-server_medical youfool-increpack-maven-plugin-git d160c658ccf1e764cb65bc5e59986b1b2b791144 64575ae03c6406744821bc4cba81b69f9f27181f src\main\resources\properties src\main\resources\spring\JobBySpring.xml src\main\resources\config.properties src\main\resources\logback.xml src\main\resources\backfill\backfill.properties ``` #### 5.1.3 前端工程配置 package.json追加工程信息 ```json { "appId": "7d7182320870b9f0a36d843ddbb77362",// 应用ID "codeId": "ec05f963917a612d247f39ec8fc1ba47",//工程ID "increApi": "http://172.22.80.91:8086/control/upgradeRecord/getUpgradeByAppIdAndCodeId"//版本服务器接口地址 } ``` vue.config.js 配置引用插件 ```javascript configureWebpack: { plugins: [ new IncrePack(packageJson) ] } ``` ## 6 下一步 ### 6.1 完善功能 1. 增量打包插件进行调整新建目录专门存放配置文件 2. 增量打包插件,进行记录删除的日志进行移除文件 ### 6.2 规划方向 1. Client功能的完整:下载补丁、关停中间件、启动中间件、系统可用性检测、系统版本升级数据管理; 2. 升级的闭环:PMS结合项目实现补丁授权、生产环境升级历史的统一管理。