jenkins发布前端版本号统一优化
jenkins发布前端版本号统一优化
之前每周一坑提过,pc端和手机端发布版本号不一致的问题【https://www.cnblogs.com/windysai/p/16659881.html】,现在想统一起来。
因为我发现,测试时不时会通知发布任务,包括发布版本号和发布内容。每周基本一个大版本号 v1.x.0 (需要人为修改版本号记录文件) 或者小版本号 v1.x.{1..n} (本周不定时发布)
现在有个问题,如果有看过我发布逻辑的文章的朋友,应该知道pc端和手机端读的是同一个版本号文件。这就有问题了,因为发布有先后次序,所以手机端总会比pc端的小版本号多1。这样就跟测试或者需求的预想有点出入。
先回顾最新的发布更新版本号逻辑:
服务器上有个版本号文件:version.txt,里面格式:
pc端 v1.9.1 20230111_21:00:00 手机 v1.9.2 20230111_21:00:00 pc端 v1.9.3 20230113_22:05:35 手机 v1.9.4 20230113_22:12:58 。。。
jenkins发布前,会从这个文件上拿到最后一行的版本号,也就是old_version,为当前系统版本号;new_version是将要发布的版本,即当前系统版本号最后一位+1
![](https://img2023.cnblogs.com/blog/520218/202303/520218-20230301225710427-1963256620.png)
(1)无论发布pc前端还是手机端,编译之前会先写入同一个临时版本号文件: version_tmp.txt,
(2)从gitlab上拉取最新代码,用new_version的版本号去更新 .env 文件的版本号(发布后的系统版本号跟这个文件有关)
(3)等编译成功,再触发另一个jenkins任务去更新最终版本号文件:version.txt。为了判断是发布pc还是手机,我会在行首以“pc端”还是“手机”去区分。
回到测试人员的问题。
如果要统一大版本号,要人为修改版本号文件:version.txt。之所以设置最后1位是-1,是因为大版本过渡,每次都是已 v1.x.0 来通知我晚上发布的
![](https://img2023.cnblogs.com/blog/520218/202303/520218-20230301230432342-196572913.png)
即使写成:
pc端 v1.13.-1 20230113_22:05:35 手机 v1.13.-1 20230113_22:12:58
我想到三种解决方法,最好的一种当然就是pc和手机独立分开使用版本号文件version.txt,不要相互影响,注意,临时版本号文件version_tmp.txt要用同一个!!!因为最终更新version.txt 是根据 version_tmp.txt 的标识(第一个字段的pc或者手机)去选择最终写入是哪个版本号文件。
临时的两种处理方法是这样的:
先贴上更新版本号的任务,执行shell的内容
if [ $result == "SUCCESS" ]; then # 更新版本号到gitlab DATE=`date +%Y%m%d_%H:%M:%S` new_ver=`cat /var/lib/jenkins/scripts/get_version/version_tmp.txt | awk '{print $2}'` pkg_deploy=`cat /var/lib/jenkins/scripts/get_version/version_tmp.txt | awk '{print $1}'` ## 控制台显示版本号 if [ $pkg_deploy == "PC端" ]; then echo pc ${new_ver} $DATE >> /var/lib/jenkins/scripts/get_version/version.txt else echo 手机 ${new_ver} $DATE >> /var/lib/jenkins/scripts/get_version/version.txt fi fi
方法1,在pc端 if 下,echo后面加一个写入上一个版本号的操作
echo pc ${new_ver} $DATE >> /var/lib/jenkins/scripts/get_version/version.txt 后面多加一条: echo 手机端 上一个版本号 >> /var/lib/jenkins/scripts/get_version/version.txt
假如new_ver = v1.13.0, 那上一个版本号应该是 v1.13.-1,这样就能保证当发布到手机端的时候,也是v1.13.0
方法2,利用发布先后次序(先pc再手机)的特点,
直接删掉:echo pc ${new_ver} $DATE >> /var/lib/jenkins/scripts/get_version/version.txt
只有发布完手机端的时候才更新版本号文件 version.txt