Monorepo架构下的CI流程与版本号管理规范:如何用Lerna优化开发体验
在Monorepo架构(单仓多包)的开发实践中,版本管理和CI/CD流程往往会面临一些特有的挑战。本文将分享我们团队如何通过引入Lerna工具优化开发流程,减少重复工作,同时保持与Multirepo开发模式的一致性体验。
问题背景:Changeset带来的重复劳动
在feature开发过程中,开发者经常需要多次将fix代码合并到test分支。如果使用Changeset工具,每次合并都需要编写Changeset文件才能触发pipeline的changeset version动作。然而:
- 这些中间过程的fix信息在最终发版时往往并不重要
- 重复编写Changeset增加了开发者负担
- 与Multirepo下的开发体验不一致
解决方案:引入Lerna优化feature→test流程
为了简化开发流程,我们引入了Lerna工具,使得在feature→test分支合并时无需编写Changeset即可触发pipeline流水线动作。
1. 安装与初始化Lerna
npm install -g lerna
lerna init
配置lerna.json文件:
{
"packages": ["packages/*"],
"version": "independent",
"command": {
"version": {
"conventionalCommits": true,
"preid": "alpha"
}
}
}
2. CI流程配置
在CI流程中添加以下命令:
npx lerna version --conventional-prerelease --preid alpha --yes --json | tee lerna-version-output.json
npx lerna publish from-package --dist-tag alpha --yes
这样配置后,feature→test的合并将自动触发版本更新和发布流程,无需开发者手动编写Changeset。
release发版流程优化
对于正式发版流程,我们仍然保留了Changeset的使用,但优化了工作方式:
- 开发者在需求上线合并到release前,只需编写一次Changeset
- 发版人员等待所有需求合并到release后,手动触发pipeline发版
- 无需拉取代码进行手动操作
发版命令如下:
npx changeset status --since=master --output=changeset-status.json
npx changeset version
npx changeset publish
为什么这样设计?
这种混合方案结合了Lerna和Changeset的优势:
- 开发阶段:使用Lerna自动管理版本,减少重复劳动
- 发布阶段:使用Changeset精确控制版本更新内容
- 一致性体验:保持了与Multirepo相似的开发流程
总结
Monorepo架构下的版本管理需要平衡自动化与精确控制的需求。通过合理组合Lerna和Changeset工具,我们实现了开发效率与发布质量的平衡。这套方案特别适合中大型Monorepo项目,希望对面临类似挑战的团队有所启发。