Java項目版本管理規(guī)范

Java項目版本管理規(guī)范

版本命名規(guī)則

Prong Boot / Prong Cloud的版本命名規(guī)范在maven的規(guī)范上做了進(jìn)一步的嚴(yán)格要求森爽,具體格式為:

<主版本>.<次版本>.<增量版本>-<代號>
部分 說明 含義
主版本 必須 主版本一般來說代表了項目的重大的架構(gòu)變更慨灭,比如說Maven 1和Maven 2,在架構(gòu)上已經(jīng)兩樣了严蓖,將來的Maven 3和Maven 2也會有很大的變化车遂。
次版本 必須 次版本一般代表了一些功能的增加或變化京办,但沒有架構(gòu)的變化,比如說Nexus 1.3較之于Nexus 1.2來說而昨,增加了一系列新的或者改進(jìn)的功能救氯,但從大的架構(gòu)上來說,1.3和1.2沒什么區(qū)別歌憨。
增量版本 必須 增量版本一般是一些小的bug修復(fù)着憨,沒有有重大的功能變化。
代號 必須 分為不穩(wěn)定版本(SNAPSHOT)和穩(wěn)定版本(非SNAPSHOT)兩類务嫡。
SNAPSHOT是指開發(fā)分支中的“最新”代碼甲抖,表示代碼可能隨時變化漆改,發(fā)布到maven的snapshot倉庫。
相反准谚,“穩(wěn)定”版本中的代碼(非SNAPSHOT后綴的任何版本值)都是不變的挫剑,發(fā)布到maven的release倉庫。

代號的取值范圍:

代號 分類 版本 說明
SNAPSHOT 不穩(wěn)定版本 開發(fā)版本 指develop分支中或者h(yuǎn)otfix/xxx分支上的最新代碼柱衔,表示代碼可能隨時變化樊破。
RCx 穩(wěn)定版本 預(yù)發(fā)布版本 當(dāng)代碼實現(xiàn)了全部功能,清除了大部分 bug唆铐,接近發(fā)布倒計時哲戚。x是數(shù)字,如RC1艾岂、RC2顺少。
RELEASE 穩(wěn)定版本 正式發(fā)布版本 指master分支中的某個tag的對應(yīng)的代碼,表示正式發(fā)布的版本澳盐。

例子:

  • 開發(fā)版本:0.1.0-SNAPSHOT祈纯、0.2.0-SNAPSHOT、2.1.0-SNAPSHOT
  • 穩(wěn)定版本:
    • 候選發(fā)布版本:0.1.0-RC1叼耙、1.2.0-RC2
    • 正式發(fā)布版本:0.1.0-RELEASE、0.1.1-RELEASE粒没、0.1.2-RELEASE筛婉、1.2.0-RELEASE

git-flow流程介紹

Prong Boot 和 Prong Cloud 項目遵循的是 git-flow 的分支流程規(guī)范。git 客戶端我們建議使用 SourceTree癞松,因為SourceTree 對 git-flow 提供了內(nèi)置的可視化支持爽撒,而不需要你去記住一大堆的命令。菜單入口是 倉庫 - git-flow响蓉,不同的 SourceTree 版本可能會有差異硕勿。

如果你堅持用命令行,可以參考這里枫甲。

git-flow 的總體流程示意圖如下:

image.png

branch(分支)

git-flow 中源武,我們有兩個永久分支:

  • develop:開發(fā)分支。日常開發(fā)使用的分支想幻,項目協(xié)作者主要工作在這個分支上粱栖,同時所有的 pull request 都應(yīng)該發(fā)到這個分支;
  • master:主分支脏毯。所有提供給用戶使用的正式版本(RELEASE)闹究,都在這個主分支上發(fā)布。

其實食店,永久分支只需要這兩條就夠了渣淤,不需要其他了赏寇。但是,除了永久分支以外价认,還有一些臨時分支蹋订,用于應(yīng)對一些特定目的的版本開發(fā)。臨時分支主要有三種::

  • feature/xxx:功能分支刻伊。它是為了開發(fā)某種特定功能露戒,從develop分支上面分出來的,開發(fā)完成后捶箱,要再并入develop智什。功能分支可以有多個,這些分支通常只是個人使用丁屎,存在開發(fā)者本地庫中荠锭,如果需要多人協(xié)作,則需要推送到遠(yuǎn)程倉庫晨川;
  • release/xxx:發(fā)布分支证九。它是指發(fā)布正式版本之前(即合并到master分支之前),我們可能需要有一個預(yù)發(fā)布(RC)的版本進(jìn)行測試共虑。發(fā)布分支對代碼進(jìn)行了封版愧怜,不允許在發(fā)布分支上開發(fā)新功能,只允許修復(fù)測試發(fā)現(xiàn)的bug妈拌;
  • hotfix/xxx:補(bǔ)丁分支拥坛。軟件正式發(fā)布以后,難免會出現(xiàn)bug尘分。這時就需要創(chuàng)建一個分支猜惋,進(jìn)行bug修補(bǔ)。補(bǔ)丁分支是從master分支上面分出來的培愁,修補(bǔ)結(jié)束以后著摔,再合并進(jìn)masterdevelop分支。

tag(標(biāo)簽)

標(biāo)簽是用于對應(yīng)每個預(yù)發(fā)布版本或發(fā)布版本的版本標(biāo)識定续,即 x.y.z-RCxx.y.z-RELEASE

開發(fā)角色

我們在項目中定義兩類角色:

開發(fā)工程師

作為開發(fā)工程師谍咆,你有兩類分支:

  • **develop **開發(fā)分支,用于下一個發(fā)布版本香罐。
  • feature/xxx 功能分支卧波,用于開發(fā)新功能 xxx,根據(jù)需要可能會有多個功能分支庇茫。

新功能開發(fā)流程

要開發(fā)下一個版本的功能港粱,你要從develop分支開出新的功能分支,最后合并回develop分支,如此往復(fù):

*    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 
|/  
* 

注意示意圖順序都是從下往上看查坪!

為了更輕松地與其他開發(fā)工程師合作開發(fā)一個大功能寸宏,你可以從這個功能分支再開出新的功能分支。你可以將這個大型功能分支叫做集成分支偿曙。

  • 在該 feature 分支上進(jìn)行開發(fā)氮凝,提交代碼,如需多人協(xié)作望忆,push 該分支到遠(yuǎn)程(origin)倉庫罩阵。
  • 你應(yīng)定期rebase(變基)或合并 develop 分支的代碼到你的 feature 分支,使你的代碼保持最新启摄,并避免合并沖突稿壁。
  • 你應(yīng)在完成某個功能后,盡可能快地合并 feature 分支代碼到 develop 分支并刪除該 feature 分支歉备,快速傳播你的提交以避免合并沖突傅是。

配置管理員

作為配置管理員,你有兩類分支:

  • **master **生產(chǎn)分支蕾羊,代表正式發(fā)布的版本(生產(chǎn)版本)喧笔。
  • release/xxx 發(fā)布分支,用于準(zhǔn)備發(fā)布版本龟再。

版本發(fā)布流程

當(dāng)準(zhǔn)備封版的時候书闸,假設(shè)你這次要發(fā)布的版本是 0.2.0-RELEASE,你需要:

  • 創(chuàng)建一個候選發(fā)布版本(release candidate)吸申,即從 SourceTree 中選擇“建立新的發(fā)布版本”梗劫,發(fā)布版本號 填寫 0.2.0-RELEASE
  • release/0.2.0-RELEASE 分支的版本號修改為 0.2.0-RC1截碴,發(fā)布到測試環(huán)境進(jìn)行測試。
  • develop 分支的版本號修改為下一個版本蛉威,即將 develop 分支的版本號修改為 0.3.0-SNAPSHOT日丹。
| *  3. 發(fā)布 RC1 到測試環(huán)境測試
| *  2. (release/0.2.0-RELEASE) 修改版本號為 0.2.0-RC1,打標(biāo)簽: 0.2.0-RC1
* |  1. (develop) 修改版本號為 0.3.0-SNAPSHOT
|/

注意蚯嫌,release/xxx 發(fā)布分支起到了凍結(jié)代碼的作用哲虾,此時不應(yīng)在這個分支上開發(fā)新的功能,RC1 版本如果測試沒有問題择示,就可以發(fā)布了束凑。但如果有bug需要修復(fù),有以下幾種做法:

  • develop 進(jìn)行 Cherry Pick(遴選)
    這是最漂亮的栅盲,但也可能不可行汪诉,因為合并沖突可能會阻礙。 還有一個風(fēng)險是 develop 分支太遙遠(yuǎn),因此很難知道修復(fù)程序在 release 分支中是否會起作用扒寄。 但我覺得它為配置管理員提供了對發(fā)布過程的最大控制權(quán)鱼鼓。
  • 開發(fā)工程師從 release 分支開一個新分支并合并回去
    這通常是在大型團(tuán)隊中的首選。 它使配置管理員可以控制發(fā)布中包含的內(nèi)容该编,避免了合并沖突的風(fēng)險迄本。 可以信任在該 feature 分支上完成的測試。 可以通過PR的方式(pull requests)來完成這一切课竣。
  • 直接提交到 release 分支
    這種適合純技術(shù)型團(tuán)隊嘉赎,例如配置管理員同時也是開發(fā)工程師。 在 release 分支上修復(fù)bug的同時于樟,開發(fā)工程師也可以在 develop 上繼續(xù)開發(fā)下一個版本公条。這種做法缺乏代碼審查,但在小項目中可能也不需要隔披。

如果RC1還有bug赃份,則需要在修復(fù)后發(fā)布下一個版本 RC2。

如果你用到 Cherry Pick(遴選)奢米,大概是這樣子:

| *  7. 發(fā)布 RC2 到測試環(huán)境測試
| *  6. 修改版本號為 0.2.0-RC2抓韩,打標(biāo)簽: 0.2.0-RC2
| *  5. 修改RC1中的bug
| *  4. 修改版本號為 0.2.0-SNAPSHOT
| *  3. 發(fā)布 RC1 到測試環(huán)境測試
| *  2. (release/0.2.0-RELEASE) 修改版本號為 0.2.0-RC1,打標(biāo)簽: 0.2.0-RC1
* |  1. (develop) 修改版本號為 0.3.0-SNAPSHOT
|/

其中鬓长,第4谒拴、5兩個commit是從 develop 進(jìn)行 Cherry Pick過來的。

如果RC2版本測試OK涉波,就可以準(zhǔn)備發(fā)布生產(chǎn)版本了英上。

  • 修改 release/0.2.0-RELEASE 分支的版本號為 0.2.0-RELEASE
  • 在SourceTree中啤覆,選擇完成發(fā)布版本苍日,此時SourceTree會自動做以下工作:
    • release/0.2.0-RELEASE 分支代碼以及RC1、RC2標(biāo)簽合并到 master 分支窗声。
    • release/0.2.0-RELEASE 分支代碼合并到develop相恃。

因為合并后 develop 的版本號被改成 0.2.0-RELEASE 了,所以此時需要將 develop 的版本號改回下一個開發(fā)版本笨觅,如 0.3.0-SNAPSHOT拦耐。

打補(bǔ)丁流程

并非每個 bug 都有打補(bǔ)丁的必要,對于不緊急的 bug见剩,可以在 develop 里修復(fù)后隨下一個版本發(fā)布杀糯。

打補(bǔ)丁是指對提供給用戶使用的正式版本進(jìn)行修復(fù)。

假設(shè)要對正式版本 0.1.0-RELEASE 打補(bǔ)丁苍苞。

  • SourceTree中固翰,選擇 建立新的修復(fù)補(bǔ)丁,修復(fù)補(bǔ)丁版本為 0.1.1-RELEASE ,此時 SourceTree 從 master 分支創(chuàng)建了一個補(bǔ)丁分支倦挂。
  • 在補(bǔ)丁分支上修復(fù)bug畸颅,修改bug的三種做法參考版本發(fā)布流程
  • hotfix/0.1.1-RELEASE 分支的版本號修改為 0.1.1-RC1方援,發(fā)布到測試環(huán)境進(jìn)行測試没炒。
  • 如果測試有bug,重復(fù)以上第2犯戏、3步送火,其中第3步中的RC版本號進(jìn)行遞增。
  • 測試沒問題后先匪,將 hotfix/0.1.1-RELEASE 分支的版本號修改為 0.1.1-RELEASE
  • 在 SourceTree中种吸,選擇 完成修復(fù)補(bǔ)丁,此時SourceTree會自動做以下工作:
    • hotfix/0.1.1-RELEASE 分支合并到 master 分支呀非。
    • hotfix/0.1.1-RELEASE 分支合并到 develop 分支坚俗。
    • 在master 分支上打標(biāo)簽 0.1.1-RELEASE
    • 最后岸裙,刪除該補(bǔ)丁分支猖败。

版本發(fā)布環(huán)境

下表列出了 Prong Boot 和 Prong Cloud 的在不同分支上發(fā)布版本時的代號,以及發(fā)布的目標(biāo)環(huán)境降允。

git分支 feature分支 develop分支 release分支 hotfix分支 master分支
Prong Boot SNAPSHOT恩闻,發(fā)布到本機(jī) SNAPSHOT,發(fā)布到maven的snapshot倉庫 RCx剧董,發(fā)布到maven的release倉庫 RCx幢尚,發(fā)布到maven的release倉庫 RELEASE,發(fā)布到maven的release倉庫
Prong Cloud SNAPSHOT翅楼,發(fā)布到本機(jī) SNAPSHOT尉剩,發(fā)布到開發(fā)測試環(huán)境 RCx,發(fā)布到準(zhǔn)生產(chǎn)環(huán)境 RCx毅臊,發(fā)布到準(zhǔn)生產(chǎn)環(huán)境 RELEASE边涕,發(fā)布到準(zhǔn)生產(chǎn)環(huán)境

Prong Boot 是一個開發(fā)腳手架,發(fā)布到maven倉庫中褂微,作為maven的組件來使用,用于快速開發(fā)一個業(yè)務(wù)微服務(wù)园爷。

Prong Cloud 是一個微服務(wù)運行框架宠蚂,發(fā)布docker的私有倉庫中,再從 CaaS 平臺拉取到相應(yīng)運行環(huán)境童社。

Prong Boot規(guī)范

1求厕、同一項目中所有模塊版本保持一致

2、子模塊統(tǒng)一繼承父模塊的版本

3、統(tǒng)一在頂層模塊Pom的<dependencyManagement/>節(jié)中定義所有子模塊的依賴版本號呀癣,子模塊中添加依賴時不要添加版本號

4美浦、開發(fā)測試階段使用SNAPSHOT

5、生產(chǎn)發(fā)布使用RELEASE

6项栏、新版本迭代只修改頂層POM中的版本

用于線上發(fā)布的代碼浦辨,不可以使用包含“SNAPSHOT 版本”的依賴包,從而確保每次構(gòu)建出的產(chǎn)物都是一致的沼沈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末流酬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子列另,更是在濱河造成了極大的恐慌芽腾,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件页衙,死亡現(xiàn)場離奇詭異摊滔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)店乐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門艰躺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人响巢,你說我怎么就攤上這事描滔。” “怎么了踪古?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵含长,是天一觀的道長。 經(jīng)常有香客問我伏穆,道長拘泞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任枕扫,我火速辦了婚禮陪腌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烟瞧。我一直安慰自己诗鸭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布参滴。 她就那樣靜靜地躺著强岸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪砾赔。 梳的紋絲不亂的頭發(fā)上蝌箍,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天青灼,我揣著相機(jī)與錄音,去河邊找鬼妓盲。 笑死杂拨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悯衬。 我是一名探鬼主播弹沽,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼甚亭!你這毒婦竟也來了贷币?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤亏狰,失蹤者是張志新(化名)和其女友劉穎役纹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暇唾,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡促脉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了策州。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘸味。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖够挂,靈堂內(nèi)的尸體忽然破棺而出旁仿,到底是詐尸還是另有隱情,我是刑警寧澤孽糖,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布枯冈,位于F島的核電站,受9級特大地震影響办悟,放射性物質(zhì)發(fā)生泄漏尘奏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一病蛉、第九天 我趴在偏房一處隱蔽的房頂上張望炫加。 院中可真熱鬧,春花似錦铺然、人聲如沸俗孝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驹针。三九已至,卻和暖如春诀艰,著一層夾襖步出監(jiān)牢的瞬間柬甥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工其垄, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留苛蒲,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓绿满,卻偏偏與公主長得像臂外,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子喇颁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353