自动化版本管理探索
在我们日常Coding过程中,经常会有开发类库的需求
开发完成发布之后,后续版本管理,更新日志等问题也随之而来,如何解决这些问题呢?
一、手打
- 手动更改版本号
- 手动变成更新日志
- 手动发布到npm私服
- 噢耶,完工
二、自动化
回到正题,如果有一种工具,我们只需要简单输入命令行,轻轻敲一下回车,就可以轻松帮我们完成手动的那些工作,。我们只需要噢耶,岂不快哉。
于是,在伟大的github上捕捉到了以下三种工具
- standard-version
- semantic-release
- lerna
让我们来详细的分别了解一下这三位选手
1、Lerna
不用说。先淘汰吧😂️。毕竟这家伙核心价值是多项目管理,跟我们的需求毫不沾边
2、standard-version
根据介绍,它的核心价值观在于语义化版本控制、打tag以及CHANGELOG生成。更为加分的是它还是代码提交规范组织的官方出品
A utility for versioning using semver and CHANGELOG generation powered by Conventional Commits.
听上去蛮符合我们的要求,使用方法也简单
standard-version |
基本上可以满足我们的日常需求。使用起来也满足我们的初始目标,一键Enter,搞定所有,我们只需要将更改推送到服务器,并且发布就好
git push --follow-tags origin master && npm publish |
3、semantic-release
打开文档介绍,原来这货的核心驱动力在于workflow。
semantic-release automates the whole package release workflow including: determining the next version number, generating the release notes and publishing the package.
相比楼上那位,该选手给我们提供了一整套完备的工作流,通过它我们可以:
- 全自动release
- 强制语义化说明
- 插件化配置
- 与CI/CD默认集成
剩下的还有好多。。。大家可以去官网看。。。
使用方法
A、使用的话会稍微复杂一点,类似babel,需要在项目中增加一个 .releaserc 文件进行插件配置
{ |
B、同时需要在ci中增加配置,在项目中配置CI所需要的环境变量,包括GL_TOKEN
、NPM_USERNAME
、NPM_EMAIL
、NPM_PASSWORD
等
stages: |
C、最重要的一点,需要在gitlab中开启PersonalAccessToken
(前提是开启2FA配置,照着步骤走,挺麻烦的也能走通后来发现不用开启2FA也能走通,那可太棒了),并设置在CI/CD的变量中
D、上述步骤做好,便可以把所有改动推送到远程仓库,坐等它带给你的惊喜
4、standard-version VS semantiv-release
功能点 | standard-version | semantic-release | 说明 |
---|---|---|---|
版本控制 | ✅ | ✅ | 会根据提交的信息类型来自动更改对应的版本号,如下: feat: 次版本(minor)+1 fix: 修订号(patch) +1 BREAK CHANGE: 主板号(marjor) +1 |
CHANGELOG | ✅ | ✅ | 均基于Angular Commit 规则 |
gitTag标记 | ✅ | ✅ | |
npm自动发布 | ✅ | ||
CI集成 | ⚠️️ | ✅ | standard-version 可以手动实现 |
pre-release实现 | ✅ | ✅ | standard-version:通过可选参数 semantic-release:通过分支设置 |
gitlab release | ✅ |
三、结论
standard-version与semantic-release 都是令人惊叹的工具,不管使用哪一个都能够最大限度的满足我们的需求。当然两个工具的侧重点是不一样的。所以我们可以根据自己的喜好来选择。
在我个人看来:
完~