管理端和手机端版本号不一致
话说A系统的生产环境,管理端和手机端前端静态目录是分开的,分别部署在两台服务器上,但,其实目录内容是完全一样的。其他环境(测试、体验)则合在一起。我之前做的一个版本号更新需求,写了好几篇文章【https://www.cnblogs.com/windysai/p/16200707.html】。
后面还优化过逻辑(一个临时文件判断状态),今天竟然有测试人员反馈,说版本号倒退:手机端比管理端版本号多一个小版本号。如下图:
管理端:
手机端:
然后前端知道这个事后,在他不知道我实现逻辑的前提下,说我每次发布都是读gitlab代码的.env 版本号,然后改掉再上传。。。
我知道后无比郁闷,作为一个“宁为玉碎不为瓦全”的女子,绝对不能含冤受屈,特意给他们解释了实现逻辑,总结如下(逻辑实现上确实没问题,粗心的锅):
每次发布真正读版本号的是服务器的版本号记录文件,并不是前端瞎扯的直接读 .env 版本号。因为如果手机端和管理端发布都要改这个文件,直接读.env版本号去取,会有偏颇。
(1)读服务器记录版本号的文件,取出上次发布的旧版本号(对应main分支.env版本号)
old_ver=服务器记录版本号的文件的旧版本号
new_ver=old_ver+1
其中old_ver 和 new_ver 顺便显示到jenkins控制台上
(下图的old_version 和 new_version 其实就是 old_ver 和 new_ver)
把new_ver 写入服务器的临时文件tmp(我后来想的优化,因为不一定会发布成功,也有可能发布任务过程中人为临时中断)
(2)编译发布
(3)发布成功才把临时文件tmp的版本号,写入服务器记录版本号的文件 xxx_version.txt,再推送修改过版本号的代码回gitlab。
大家可以想想为啥手机端会多了一个版本号?
前面也说过,之前管理端和手机端合一起,所以更新版本号只需要做一次,现在分开,则两边都要做!!!
我手机端仅仅改了,从gitlab拉下来的 .env 版本号,然后编译代码,最后忘记推送回gitlab了,如下图:
服务器去到jenkins任务区间验证,确实是这个原因:
解决这个问题也很容易,既然手机端没推送回gitlab,补一下就得了。
而为了区分究竟是手机端还是管理端更新的版本号,我用了一个标识(pkg_deploy)去区分,admin表示管理端,mobile 则是手机端。
临时文件要写入是admin还是mobile,例如发布管理端,则写入:
echo admin ${new_ver} $DATE > admin_version_tmp.txt
如果是手机端,则写入:
echo mobile ${new_ver} $DATE > admin_version_tmp.txt
最后统一调用更新版本号的jenkins任务:
现在那个服务器的版本号记录文件变成这种形式:
admin 版本号a1 发布时间 mobile 版本号a1+1 发布时间
。。。。