一、存在问题
公司采用jenkins做持续集成工具,在项目发布生产的过程,jenkins会先拿到项目所有版本号,对比最新版本号与最后一次发布版本号的差异,决定是否执行发布操作,因此要求每次在发布线上环境之前,开发人员需要在代码仓库中手动添加一个发布版本号。 这样的流程比较半自动,版本号需要依赖人工操作,一但PR前忘记添加版本号,整个pr流程就得重新走一遍,发布耗时,流程繁琐。
二、优化目标
能按一定规则自动生成版本号,自动写入版本号,更新commit和tag。
三、具体实现
- 使用standard-version生成和管理项目发布版本。(自动生产版本号要具备语义,对每一次代码commit有一定的规范要求,具体可阅读[Angular 的提交规范]相关文章)
standard-version是 conventional-changelog 推荐使用的标准化 npm 版本生成工具,它可以取代 npm version 指令,并提供更简便、语义化的调用方式。
2.项目代码改动 在 ‘package.json’ 中新增下面新增包和命令
"scripts": { ... "release": "standard-version" }
"devDependencies": { ... "standard-version": "^9.5.0" }
- jenkins改造 在install和build阶段增加两个命令,对应上面的两个步骤,运行relase命令,将生成出来的commit推送到远程,把tag也推送到远程,保证更新同步
install npm run release
git push origin HEAD:master
git push --tags
npm run build
四、扩展知识
1、npm 语义化版本,共三位,以’.’隔开,从左至右依次代表:
- 主版本(major)
- 次要版本(minor)
- 补丁版本(patch)
2、版本变更的推荐采用以下策略:
| 代码状态 | 等级 | 规则 | 版本样例 |
|---|---|---|---|
| 首次发布 | 新品发布 | 以1.0.0开始 | 1.0.0 |
| bug 修复,向后兼容 | 补丁版本发布 | 变更第三位数字 | 1.0.1 |
| 新功能,向后兼容 | 次版本发布 | 变更第二位数字,并且第三位数字重置为 0 | 1.1.0 |
| 重大变更,不向后兼容 | 主版本发布 | 变更第一位数字,并且第二位和第三位数字重置为 0 | 2.0.0 |