Java项目版本管理规范

2018-08-20  本文已影响960人  大浪滔滔

Java项目版本管理规范

版本命名规则

Prong Boot / Prong Cloud的版本命名规范在maven的规范上做了进一步的严格要求,具体格式为:

<主版本>.<次版本>.<增量版本>-<代号>
部分 说明 含义
主版本 必须 主版本一般来说代表了项目的重大的架构变更,比如说Maven 1和Maven 2,在架构上已经两样了,将来的Maven 3和Maven 2也会有很大的变化。
次版本 必须 次版本一般代表了一些功能的增加或变化,但没有架构的变化,比如说Nexus 1.3较之于Nexus 1.2来说,增加了一系列新的或者改进的功能,但从大的架构上来说,1.3和1.2没什么区别。
增量版本 必须 增量版本一般是一些小的bug修复,没有有重大的功能变化。
代号 必须 分为不稳定版本(SNAPSHOT)和稳定版本(非SNAPSHOT)两类。
SNAPSHOT是指开发分支中的“最新”代码,表示代码可能随时变化,发布到maven的snapshot仓库。
相反,“稳定”版本中的代码(非SNAPSHOT后缀的任何版本值)都是不变的,发布到maven的release仓库。

代号的取值范围:

代号 分类 版本 说明
SNAPSHOT 不稳定版本 开发版本 指develop分支中或者hotfix/xxx分支上的最新代码,表示代码可能随时变化。
RCx 稳定版本 预发布版本 当代码实现了全部功能,清除了大部分 bug,接近发布倒计时。x是数字,如RC1、RC2。
RELEASE 稳定版本 正式发布版本 指master分支中的某个tag的对应的代码,表示正式发布的版本。

例子:

git-flow流程介绍

Prong Boot 和 Prong Cloud 项目遵循的是 git-flow 的分支流程规范。git 客户端我们建议使用 SourceTree,因为SourceTree 对 git-flow 提供了内置的可视化支持,而不需要你去记住一大堆的命令。菜单入口是 仓库 - git-flow,不同的 SourceTree 版本可能会有差异。

如果你坚持用命令行,可以参考这里

git-flow 的总体流程示意图如下:

image.png

branch(分支)

git-flow 中,我们有两个永久分支:

其实,永久分支只需要这两条就够了,不需要其他了。但是,除了永久分支以外,还有一些临时分支,用于应对一些特定目的的版本开发。临时分支主要有三种::

tag(标签)

标签是用于对应每个预发布版本或发布版本的版本标识,即 x.y.z-RCxx.y.z-RELEASE

开发角色

我们在项目中定义两类角色:

开发工程师

作为开发工程师,你有两类分支:

新功能开发流程

要开发下一个版本的功能,你要从develop分支开出新的功能分支,最后合并回develop分支,如此往复:

*    4. (develop)  合并 'feature/work-with-correcting-a' 到 develop 
|\  
| *  3. (feature/work-with-correcting-a) Correcting a
|/  
*    2.  合并 'feature/work-with-a' 到 develop 
|\  
| *  1. (feature/work-with-a)  a 
|/  
* 

注意示意图顺序都是从下往上看!

为了更轻松地与其他开发工程师合作开发一个大功能,你可以从这个功能分支再开出新的功能分支。你可以将这个大型功能分支叫做集成分支

配置管理员

作为配置管理员,你有两类分支:

版本发布流程

当准备封版的时候,假设你这次要发布的版本是 0.2.0-RELEASE,你需要:

| *  3. 发布 RC1 到测试环境测试
| *  2. (release/0.2.0-RELEASE) 修改版本号为 0.2.0-RC1,打标签: 0.2.0-RC1
* |  1. (develop) 修改版本号为 0.3.0-SNAPSHOT
|/

注意,release/xxx 发布分支起到了冻结代码的作用,此时不应在这个分支上开发新的功能,RC1 版本如果测试没有问题,就可以发布了。但如果有bug需要修复,有以下几种做法:

如果RC1还有bug,则需要在修复后发布下一个版本 RC2。

如果你用到 Cherry Pick(遴选),大概是这样子:

| *  7. 发布 RC2 到测试环境测试
| *  6. 修改版本号为 0.2.0-RC2,打标签: 0.2.0-RC2
| *  5. 修改RC1中的bug
| *  4. 修改版本号为 0.2.0-SNAPSHOT
| *  3. 发布 RC1 到测试环境测试
| *  2. (release/0.2.0-RELEASE) 修改版本号为 0.2.0-RC1,打标签: 0.2.0-RC1
* |  1. (develop) 修改版本号为 0.3.0-SNAPSHOT
|/

其中,第4、5两个commit是从 develop 进行 Cherry Pick过来的。

如果RC2版本测试OK,就可以准备发布生产版本了。

因为合并后 develop 的版本号被改成 0.2.0-RELEASE 了,所以此时需要将 develop 的版本号改回下一个开发版本,如 0.3.0-SNAPSHOT

打补丁流程

并非每个 bug 都有打补丁的必要,对于不紧急的 bug,可以在 develop 里修复后随下一个版本发布。

打补丁是指对提供给用户使用的正式版本进行修复。

假设要对正式版本 0.1.0-RELEASE 打补丁。

版本发布环境

下表列出了 Prong Boot 和 Prong Cloud 的在不同分支上发布版本时的代号,以及发布的目标环境。

git分支 feature分支 develop分支 release分支 hotfix分支 master分支
Prong Boot SNAPSHOT,发布到本机 SNAPSHOT,发布到maven的snapshot仓库 RCx,发布到maven的release仓库 RCx,发布到maven的release仓库 RELEASE,发布到maven的release仓库
Prong Cloud SNAPSHOT,发布到本机 SNAPSHOT,发布到开发测试环境 RCx,发布到准生产环境 RCx,发布到准生产环境 RELEASE,发布到准生产环境

Prong Boot 是一个开发脚手架,发布到maven仓库中,作为maven的组件来使用,用于快速开发一个业务微服务。

Prong Cloud 是一个微服务运行框架,发布docker的私有仓库中,再从 CaaS 平台拉取到相应运行环境。

Prong Boot规范

1、同一项目中所有模块版本保持一致

2、子模块统一继承父模块的版本

3、统一在顶层模块Pom的<dependencyManagement/>节中定义所有子模块的依赖版本号,子模块中添加依赖时不要添加版本号

4、开发测试阶段使用SNAPSHOT

5、生产发布使用RELEASE

6、新版本迭代只修改顶层POM中的版本

用于线上发布的代码,不可以使用包含“SNAPSHOT 版本”的依赖包,从而确保每次构建出的产物都是一致的。

上一篇下一篇

猜你喜欢

热点阅读