评论

【云中忆软件】B/S企业管理系统如何给客户自动升级系统和数据库

虽然我们是一家软件公司,但是本质上我们也是一家企业,也会有自己的信息化要求,毕竟做信息化都是为了提高工作效率,降低公司重复低效的事情,所以很多时候,在部门和部门间的工作出现问题时,我们都会去考虑解决方案,今天要聊得就是关于我们公司使如何解决给客户自动升级的一整套解决方案。

一、我们的问题

先说说我们之前工作的低效点,也就是把场景给大家描述下,大家可以看看您自己公司是不是也有这个问题。

作为软件公司,我们的产品给我们的用户提供了服务使用,但是我们的产品不是通用的产品,是通用产品+可定制化,所以基于这一点,我们的客户都会提出他们的需求,我们根据他们的需求管理来调整系统,基于这几点,最终我们给用户提供的是独立部署的系统和数据库。这种方式不仅可以满足客户的定制,而且也可以实现客户的私有化部署。虽然这种方式对于我们的使用用户很好,但作为软件公司而言,实际的内部迭代升级和部署工作量却不低。

首先我们内部大部分是通用自己的一套框架代码,数据库也是一套,客户如果有特殊的定制,我们都会去新建配置或者新建功能组件、页面等,这里就不展开讲我们是如何实现多客户的定制的,是怎么在一套代码中区分的,这个我后续单独写一篇。回到刚说的,如果我们要给客户升级,那我们是怎么处理的呢?

第一版,我们的处理方式:大概是在2015那个时候,因为客户量不多,所以我们用了比较传统的方式,就是每个开发人员记录好自己的数据库sql,当时规定无论是新增数据库字段,或是表,或是存储过程等,都是需要自己用文本文件记录下来,后续统一发给升级的人员。对于的代码当时用的svn来管理,做统一的提交,获取,更新等,但是这种用了不到三个月就发现效率很低,有的时候客户正式的数据库和我们本地的不一样,导致系统使用过程中保存,这种方式有低效,而且还不能保证统一和正确性,基于这些因素我们就在寻求工具,希望解决数据库生产和开发环境一致的问题。

第二版,这次我们主要解决的是线上和线下数据库不一致的问题,基于这个需求,我们找了很多现成的软件工具,但最后我们测试用过后,选择了SQL Compare,选择这个的原因有这几点:

1)可对比表,存储过程,函数,表字段长度等,每个环节都对比到了

2)可选择一键同步到生产环境

3)历史的升级记录有备份sql

4)可以通过pj,免费使用

用这个工具,我们基本上就从数据库不一致的这个问题彻底解决了。但是随之而来的其他问题又来了。

我们先说我们内部出现的另外一个问题,因为这个要靠技术这边每次来升级和对比sql,人为处理这种,难免会出错,因为升级是个很无聊无趣的事情,升级一个客户还好,一次要升级10个,那就很恼火了。升级的人同时要对比10个数据库,虽然只需要发布一次代码,但是也要替换升级10次系统代码。升级的负责人有时候会忘记升级数据库、有时候会忘记升级代码,还有的时候替换文件的时候有重复文件没点击确定继续替换等等类似的问题,基于这一点,我们彻底崩溃了,不同的升级负责人出的问题都是因为自己的不细心,所以我们决定对升级彻底的改造。

说下彻底改造的整体改造自动升级的思路,主要有以下几点:

1、代码获新:用命令自动拉取代码最新版,这里我们用到svn的命令即可

2、代码发布:调用编辑器的命令,写bat命令文件,自动发布

3、代码清理:不必要的一些发布文件删除掉,避免开发环境的文件把客户正式环境给替换掉了

4、代码压缩:为了更快的传输,我们会把发布的文件压成zip包,这里用到了压缩命令zip

5、代码备份:在给客户系统升级的前需要把客户的原有正在使用的代码进行压缩备份,这里我们直接备份压缩到nas,不知道nas的可以研究下

6、数据库对比:这里对比我们自己写的一套工具,自动对比,对比的逻辑主要是表、存储过程、函数、只往客户生产环境新增字段、新增表、新增存储过程、更新存储过程、更新字段长度这些操作,不对生产环境的数据库字段删除、不删存储过程、不删表。

7、数据库备份:升级前备份数据库,压缩成zip,备份到nas,后续如果升级出问题可以回滚

8、数据库升级:对比生成的差异sql文件,到数据库去自动执行,升级成功后返回结果,升级失败回滚,检查原因

9、升级完成:自动检测系统是否会报错,如果报错我们检测原因,如客户马上要使用选择回滚即可

具体每一步的实现和难点我都会在后续的文章中更新,以下截图可参考:

图一:我们的crm系统的升级和部署:

图二:点击客户勾选去升级,如下

图三:升级核心桥梁,nas盘,会挂接到每台服务器:

原文链接:https://www.cdyzy.net/RelatedInformationDetail/537.html返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()