一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种代码增量发布更新方法及系统与流程

2021-10-27 21:10:00 来源:中国专利 TAG:增量 代码 更新 方法 开发


1.本发明涉及应用开发技术领域,具体涉及一种代码增量发布更新方法及系统。


背景技术:

2.随着互联网的发展,用户浏览网页属于常见行为。网页可以向用户展示各类信息、为用户提供各种功能的服务。网页主要通过在服务器端部署的代码实现前述作用。而针对网页所部署的代码主要包括前端代码和后端代码,前端代码主要用于实现网页页面上的静态展示、交互等功能,而后端代码主要用于实现网页后台的数据处理、处理逻辑等。
3.前端网页页面的需求经常性发生变更,有时候只是改动了一个文案或一张图片,但是需要将完整的代码重新打包发布,此时代码编译后的整个文件中只有其中的一两个文件发生细微变化,大部分(约有99%)代码是没有改动的。为了满足业务上线需求,需要将编译后的整个代码目录完整上传发布即替换文件夹,或者在nginx服务器(或apache服务器)上配置重写rewrite规则,采用这种方式发布更新增量代码存在诸多问题,例如用户第二次访问网页页面时,需要完整重新下载所有需要的代码,且历史缓存文件失效,对于流量控制及页面加载体验都很不友好;储存文件存在很多重复,造成服务器的存储空间大量浪费;线上发布异常回滚流程繁琐,容易出错导致线上故障;发布过程需要运行维护人员参与,可扩展性较差,因此针对以上问题,迫切需要设计出一种代码增量发布更新方法及系统,以满足实际使用的需要。


技术实现要素:

4.本发明的目的在于,提供一种代码增量发布更新方法及系统,集代码构建、打包、发布于一体,能够支持同一公司的各业务部门的代码发布、增量更新、灰度发布等服务。
5.本发明所解决的技术问题可以采用以下技术方案来实现:
6.本发明提供一种代码增量发布更新方法,包括:
7.步骤s1,对构建的代码源文件进行打包,得到一个或一个以上的打包文件;
8.步骤s2,为每个所述打包文件配置一文件名索引,并将配置好的所述文件名索引更新到一索引表中;
9.步骤s3,判断所述索引表中的所述文件名索引是否发生变更,若发生变更,则提取发生变更的所述文件名索引对应的变更文件,并存储提取的所述变更文件作为产出物;
10.步骤s4,根据所述产出物对所述变更文件进行分层部署,以更新版本,将更新版本记录信息上传至一发布系统,所述更新版本记录信息包括所述索引表,并将更新后的版本镜像到一内容分发网络中;
11.步骤s5,所述发布系统通过一内容管理单元接收并自动录入所述更新版本记录信息,所述内容管理单元接收用户选择的发布信息,并将所述发布信息中对应的版本更新至对应服务器的缓存中;
12.步骤s6,所述服务器根据当前的版本信息从所述缓存中匹配得到对应的所述索引
表,并根据匹配得到的所述索引表从所述内容分发网络中获取静态资源地址,完成更新。
13.优选地,所述步骤s1中,对开发的代码源文件进行打包,之前还包括:
14.步骤s0,基于编程框架构建开发代码,得到构建的所述代码源文件。
15.优选地,所述步骤s1具体包括:
16.步骤s11,调用一模块打包器;
17.步骤s12,所述模块打包器采用多入口打包的方式对所述代码源文件进行打包,得到所述一个或一个以上的打包文件。
18.优选地,所述步骤s3具体包括:
19.步骤s31,对所述索引表中的所述文件名索引对应的所述打包文件进行差异化对比,得到一对比结果;
20.步骤s32,根据所述对比结果提取发生变更的所述打包文件作为所述变更文件;
21.步骤s33,将提取的所述变更文件存储至所述产出物中。
22.优选地,所述步骤s4中,采用一应用容器引擎对所述产出物中的所述变更文件进行分层动态部署。
23.优选地,所述步骤s6中,所述服务器通过所述内容管理单元的接口直接从所述缓存中读取对应的所述索引表;或
24.若所述缓存中没有对应版本的所述索引表,则通过所述内容管理单元的接口读取版本对应的所述索引表,并写入到对应的所述缓存中。
25.本发明还提供一种代码增量发布更新系统,用于实施如上述的代码增量发布更新方法,包括:
26.一代码构建单元,用于构建开发代码,并对构建的代码源文件进行打包,所述代码构建单元还包括:
27.一配置子单元,连接所述代码构建单元,用于为每个所述打包文件配置一文件名索引,并将配置好的所述文件名索引更新到一索引表中;
28.一变更提取子单元,分别连接所述配置子单元和所述索引表,用于当判断出所述索引表中的所述文件名索引发生变更时,提取发生变更的所述文件名索引对应的变更文件,并存储提取的所述变更文件作为产出物;
29.一部署单元,连接所述变更提取单元,用于根据所述产出物对所述变更文件进行分层部署,以更新版本,将更新版本记录信息上传至一发布系统,所述更新版本记录信息包括所述索引表,并将更新后的版本镜像到一内容分发网络中;
30.一发布系统,连接所述部署单元,所述发布系统包括:
31.一内容管理单元,用于接收并自动录入所述更新版本记录信息,所述内容管理单元接收用户选择的发布信息,并将所述发布信息中对应的版本更新至对应服务器的缓存中;
32.至少一个服务器,分别连接内容管理单元和所述内容分发网络,用于根据当前的版本信息从所述缓存中匹配得到对应的所述索引表,并根据匹配得到的所述索引表从所述内容分发网络中获取静态资源地址,完成更新。
33.优选地,所述代码构建单元基于编程框架构建开发代码,得到构建的所述代码源文件。
34.优选地,所述内容管理单元包括一数据库,所述数据库用于记录版本的发布信息、更新版本记录信息。
35.优选地,还包括:
36.一模块打包器,连接所述代码构建单元,用于所述代码构建单元调用所述模块打包器时,所述模块打包器采用多入口打包的方式对所述代码源文件进行打包,得到所述一个或一个以上的打包文件。
37.本发明技术方案的有益效果在于:
38.本发明集代码构建、打包、发布于一体,能够支持同一公司的各业务部门的代码发布、增量更新、灰度发布等服务;对构建的代码源文件进行打包并配置文件名索引,更新到索引表中,通过逐行读取对比索引表,找出变更文件,并进行分层部署,服务部署可横向扩展支持多种业务,节约存储成本;发布系统将发布版本代码索引表存储至对应的缓存中,节约服务存储成本,缓存复用,加速用户访问、加载体验,服务器从缓存中匹配得到对应的索引表,并根据匹配得到的索引表从内容分发网络中获取静态资源地址,规范化了版本发布、版本回滚流程,优化用户加载体验,操作安全便捷易操作。
附图说明
39.图1是本发明中一种代码增量发布更新方法的流程示意图;
40.图2是本发明中步骤s1具体实施例的流程示意图;
41.图3是本发明中步骤s4具体实施例的流程示意图;
42.图4是本发明中一种代码增量发布更新系统具体实施例的结构框图。
具体实施方式
43.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
44.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
45.下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
46.本发明提供一种代码增量发布更新方法及系统,一种集代码构建、打包、发布于一体的全自动化ci&cd平台,能够支持同一公司的各业务部门的代码发布、增量更新、灰度发布等服务;该系统主要使用到模块打包器webpack、jenkins、应用容器引擎、nodejs服务器等中间件或服务。
47.webpack是一个模块打包器,是一种常用于现代javascript应用程序的静态模块打包工具,webpack运行时自动解析模块依赖生成一个或多个bundle打包文件。
48.jenkins是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,使软件项目可以进行持续集成,是开源ci&cd软件领导者,jenkins提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。
49.docker容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的
应用代码源文件以及依赖包到一个可移植的容器中,然后发布到任何安装了docker应用容器引擎的服务器上(包括流行的linux机器、windows机器),与虚拟机类似,应用容器引擎也可以实现虚拟化,提供代码独立运行宿主环境。并且容器是完全使用沙箱机制,相互之间不会有任何接口(类似iphone的app),几乎没有性能开销,不依赖于任何语言、框架包括系统。
50.内容管理单元(cms):基于nodejs开发的一个nodejs服务,用于维护版本更新、变更、发布、回滚、灰度管理平台,服务器本身依赖mysql数据库、redis缓存等中间件。
51.本发明提供一种代码增量发布更新方法,属于应用开发技术领域,参见图1

4,包括:
52.步骤s1,对构建的代码源文件进行打包,得到一个或一个以上的打包文件;
53.作为优选的实施方式,步骤s1中,对开发的代码源文件进行打包,之前还包括:
54.步骤s0,前端基于编程框架工程化构建开发代码,得到构建的代码源文件。优选的,在本实施例中,采用渐进式前端框架vue或web开发框架react等编程框架开发代码,进一步的,还可以采用其他主流的编程框架实现源代码的开发。
55.具体的,在本实施例中,多个业务维护在同一个工程项目中,因此,本技术方案区别于一般单个单页应用,对构建流程(即步骤s1

s3)做了进一步的改进。
56.作为优选的实施方式,如图2所示,步骤s1具体包括:
57.步骤s11,调用一模块打包器;
58.步骤s12,模块打包器采用多入口打包的方式对代码源文件进行打包,得到一个或一个以上的打包文件。
59.在步骤s1中,jenkins调用模块打包器webpack,通过多入口打包方式将各入口处的代码源文件分别进行打包。当webpack运行时,对文件进行预编译;loder

css/js语法检查;自动解析模块依赖压缩/合并文件,生成一个或多个打包文件,打包文件为bundles格式的文件。
60.步骤s2,为每个打包文件配置一文件名索引,并将配置好的文件名索引更新到一索引表中;
61.在步骤s2中,使用md5哈希算法为每个打包文件形成文件名索引,同时将每个文件名索引维护到一个索引表中。
62.步骤s3,判断索引表中的文件名索引是否发生变更,若发生变更,则提取发生变更的文件名索引对应的变更文件,并存储提取的变更文件作为产出物;
63.作为优选的实施方式,如图3所示,步骤s3具体包括:
64.步骤s31,对索引表中的文件名索引对应的打包文件进行差异化对比,得到一对比结果;
65.步骤s32,根据对比结果提取发生变更的打包文件作为变更文件;
66.步骤s33,将提取的变更文件存储至产出物中。
67.在步骤s3中,使用shell脚本对索引表进行文件差异化对比,即逐行读取对比索引表,找出增量修改文件,作为变更文件并提取出来,可通过复制copy的方式将变更文件存储得到产出物中。
68.步骤s4,根据产出物对变更文件进行分层部署,以更新版本,将更新版本记录信息上传至一发布系统,更新版本记录信息包括索引表,并将更新后的版本镜像到一内容分发
网络中;
69.作为优选的实施方式,步骤s4中,采用一应用容器引擎(docker容器)对产出物中的变更文件进行分层动态部署。
70.完成分层动态部署后,更新版本的记录并将更新后的版本对应的索引表包括在更新版本记录信息中上传至发布系统,同时将更新后对应版本的docker容器镜像推到内容分发网络中,通过分层部署,可横向扩展支持多种业务,节约存储成本。
71.步骤s5,发布系统通过一内容管理单元接收并自动录入更新版本记录信息,内容管理单元接收用户选择的发布信息,并将发布信息中对应的版本更新至对应服务器的缓存中;
72.具体的,完成分层动态部署后,得到更新版本记录信息,更新版本记录信息包括最新的版本号、对应的运行环境和服务器以及更新后的版本号对应的索引表,调用发布系统的接口完成更新版本记录信息的自动录入,为了避免发布系统将新的版本直接发布到线上,发布系统有一个专门的服务后台,简称内容管理单元cms,内容管理单元自动录入更新版本记录信息后,会形成对应的版本记录,由测试人员在内容管理单元选择对应的版本号作为需要发布的版本,以及指定的运行环境和服务器,并更新对应运行环境的服务器的缓存redis中缓存记录,发布系统连接至少一个业务系统,前端的每个业务系统对接内容管理单元的接口,优先读取缓存redis中的缓存数据;如果redis中没有缓存数据,则向内容管理单元的接口服务读取版本并写入新的版本到指定redis中。前端业务系统读取指定redis的缓存信息,匹配到对应版本的哈希索引表,从内容分发网络中获取静态资源地址,生成最终服务的静态资源文件,完成前端版本的上线。
73.采用上述流程完成前端业务版本上线,老用户再次访问页面时无需再重新加载历史缓存数据,提升了用户加载速度优化了用户体验。
74.步骤s6,服务器根据当前的版本信息从缓存中匹配得到对应的索引表,并根据匹配得到的索引表从内容分发网络中获取静态资源地址,完成更新。
75.作为优选的实施方式,步骤s6中,服务器通过内容管理单元的接口直接从缓存中读取对应的索引表,其中服务器可以是只有一个,也可以是多个,可以是www服务器或liveweb服务器或m服务器或front服务器中的任意一种;或
76.若缓存中没有对应版本的索引表,则通过内容管理单元的接口读取版本对应的索引表,并写入到对应的缓存中。
77.具体的,通过将发布版本代码索引表存储至对应的缓存中,节约服务存储成本,缓存复用,加速用户访问、加载体验;服务器从缓存中匹配得到对应的索引表,并根据匹配得到的索引表从内容分发网络中获取静态资源地址,规范化了版本发布、版本回滚流程,优化用户加载体验,操作安全便捷易操作。
78.本发明还提供一种代码增量发布更新系统,用于实施如上述的代码增量发布更新方法,如图4所示,包括:
79.一代码构建单元1,代码构建单元1采用jenkins构建开发代码,并jenkins调用模块打包器webpack对构建的代码源文件进行打包,然后对打包后的文件进行预处理,预处理包括文件配置、增量差异化文件(即变更文件)提取;
80.即代码构建单元1还包括:
81.一配置子单元,连接代码构建单元1,用于为每个打包文件配置一文件名索引,并将配置好的文件名索引更新到一索引表中;
82.一变更提取子单元,分别连接配置子单元和索引表,用于当判断出索引表中的文件名索引发生变更时,提取发生变更的文件名索引对应的变更文件,并复制到产出物中存储;
83.一部署单元2,连接变更提取子单元,用于根据产出物对变更文件进行分层部署,以更新版本,将更新版本记录信息上传至一发布系统,更新版本记录信息包括索引表,并将更新后的版本镜像到一内容分发网络5中;
84.部署单元2采用应用容器引擎,应用容器引擎中包括一个及一个以上的docker容器,每个docker容器可分别对应一个服务器或业务系统
85.一发布系统,连接部署单元2,发布系统包括:
86.一内容管理单元31,用于接收并自动录入更新版本记录信息,内容管理单元31接收用户选择的发布信息,并将发布信息中对应的版本更新至对应服务器的缓存中;
87.作为优选的实施方式,内容管理单元cms是发布系统的一个专门的服务后台,测试人员可以在内容管理单元中选择发布的版本,以及指定的运行环境和服务器,这些信息包括在发布信息中。
88.内容管理单元依赖于mysql数据库、redis缓存等中间件,来维护版本更新、变更、发布、回滚、灰度的管理,内容管理单元通过将需要更新、变更、发布、回滚、灰度的版本信息存储在缓存中,由服务器读取对应的缓存中的索引表,再从内容分发网络中获取静态资源地址,得到静态资源文件,即版本对应的软件包。
89.至少一个服务器4,分别连接内容管理单元31和内容分发网络5,用于根据当前的版本信息从缓存中匹配得到对应的索引表,并根据匹配得到的索引表从内容分发网络5中获取静态资源地址。
90.作为优选的实施方式,代码构建单元1基于编程框架构建开发代码,得到构建的代码源文件;
91.编程框架包括渐进式前端框架vue或web开发框架react。
92.作为优选的实施方式,内容管理单元31包括一数据库,数据库用于记录版本的发布信息、更新版本记录信息。
93.作为优选的实施方式,还包括:
94.一模块打包器webpack,连接代码构建单元1,用于代码构建单元1调用模块打包器时,模块打包器采用多入口打包的方式对代码源文件进行打包,得到一个或一个以上的打包文件。
95.本发明技术方案的有益效果在于:
96.本发明集代码构建、打包、发布于一体,能够支持同一公司的各业务部门的代码发布、增量更新、灰度发布等服务;对构建的代码源文件进行打包并配置文件名索引,更新到索引表中,通过逐行读取对比索引表,找出变更文件,并进行分层部署,服务部署可横向扩展支持多种业务,节约存储成本;发布系统将发布版本代码索引表存储至对应的缓存中,节约服务存储成本,缓存复用,加速用户访问、加载体验,服务器从缓存中匹配得到对应的索引表,并根据匹配得到的索引表从内容分发网络中获取静态资源地址,规范化了版本发布、
版本回滚流程,优化用户加载体验,操作安全便捷易操作。
97.以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜