前端项目发布自动打tag实践

背景

公司内部的前端项目发布,采用的是容器化部署的方式,运维需要在每次发布的时候指定一个类似版本号的东西,可以做管理,例如回滚之类的,之前的方式是每次在发布线上环境之前,代码仓库中手动打一个tag,在jenkins中获取到所有tag,拿最新的那个tag最为版本号。

这样的流程存在一些缺点,例如

  • 需要发布者手动打tag,tag的规则又比较依赖发布者的手动输入
  • 经常会遗忘打tag的操作,导致发布的时候前面的步骤执行完成,到最后的发布才报错,在发布的时候比较浪费时间
  • PR的步骤和打tag的步骤比较割裂,如果发现上述没有打tag的报错,又需要重新提PR发布,流程上相对繁琐

优化思路

根据上面提到的缺点,可以用新的思路来做这个事情,总体思路就是PR合并之后自动生成tag并推到远程,不再手动打tag

原先的流程:

手动在代码仓库打tag => 提PR => PR通过 => jenkins触发执行流水线 => 安装依赖 => 构建产物 => 更新镜像容器

新的流程:

提PR => PR通过 => jenkins触发执行流水线 => 安装依赖 => 运行命令生成版本更新commit和tag => 推送到远程仓库 => 构建产物 => 更新镜像容器

代码改动

这里我们需要用到新的包来做自动生成版本号的操作,在 package.json 中新增下面新增包和命令

json 复制代码
"scripts": { 
    ... 
    "release": "standard-version" 
}, 
"devDependencies": { 
    ...
    "standard-version": "^9.5.0" 
}

如果是旧的项目,就把package.json中的versions设置为同代码仓库中最新的tag一致,例如1.1.0, 如果是没有上线过的项目 ,直接设置为1.0.0即可。设置完成之后,执行npm i, 这样会更新package-lock.json

执行relase命令之后会自动生成commit,这一步不需要前端去修改什么,只要了解这个做了什么即可

  • 自动打了tag
  • 更新了package.json中的verison,同tag一致
  • 更新了CHANGELOG.md
  • 更新了package-lock.json

jenkins调整

只修改jenkins中对应的任务重调整命令,如果某个环境不需要,就无需调整 调整命令,在install和build阶段增加两个命令,对应上面的两个步骤,运行relase命令,将生成出来的commit推送到远程,把tag也推送到远程,保证更新同步

arduino 复制代码
npm install
npm run release
git push origin HEAD:master
git push --tags
npm run build

权限设置

因为上面的流程是需要推送到commit还有tag到远程分支的,一般线上环境我们都是指定用master分支,会设置为protect,这时候我们需要给jenkins中执行的账号开通权限,允许其可以往master中推送commit和tag

相关推荐
55873生态系统手记6 小时前
读完 55873 资产钱包的技术栈,我重新理解了 "合规钱包" 应该长什么样
算法·架构
zach7 小时前
Vue/React SPA 打包部署后,子路由刷新 401 未登录问题彻底解决
前端·nginx·next.js
旋生万物7 小时前
素数螺旋映射 $z_n=n^{1+i}$ 的角分布统计检验与零模型对比
大数据·前端·人工智能·算法·云原生·螺旋生成论·螺旋相位
福兮说7 小时前
JS 正则的六个坑:带 g 的 test() 一真一假、空匹配死循环、replace 里的 $
开发语言·前端·javascript·正则表达式
ting94520007 小时前
深度拆解|Dif.Sh 开源特性开关(Feature Flags)技术架构与工程落地全解析
人工智能·架构·开源
码艺-Alimjan7 小时前
Web 网站打包桌面应用的另一种方式,超级简单(C# exe 33Kb)
开发语言·前端·c#
flash俊杰7 小时前
时间线到 filter_complex:把编辑文档编译成 FFmpeg 滤镜图
前端
Token架构师7 小时前
给 Claude Code 套一层「进程外」策略:OpenShell 落地与审计日志分析
人工智能·安全·架构
ESDWAN7 小时前
企业组网后网络频繁掉线,常见故障排查指南
运维·网络·架构
Tyrvision7 小时前
新品发布前,三维动画怎么排期才不挤在最后一周?
前端