參考極客時(shí)間甥材,持續(xù)交付36講
一切的源頭顷窒,代碼分支策略的選擇
采用不同的代碼分支策略常挚,意味著實(shí)施不同的代碼集成與上線流程作谭,這會(huì)影響整個(gè)研發(fā)團(tuán)隊(duì)每日的協(xié)作方式,因此研發(fā)團(tuán)隊(duì)通常會(huì)很認(rèn)真地選擇自己的策略奄毡。
主干開發(fā)
主干開發(fā)是一個(gè)源代碼控制的分支模型折欠,開發(fā)者在一個(gè)稱為 “trunk” 的分支(Git 稱 master) 中對代碼進(jìn)行協(xié)作,除了發(fā)布分支外沒有其他開發(fā)分支吼过。
大多數(shù)時(shí)候锐秦,發(fā)布分支是主干某個(gè)時(shí)點(diǎn)的快照。以后的改 Bug 和功能增強(qiáng)盗忱,都是提交到主干酱床,必要時(shí) cherry-pick (選擇部分變更集合并到其他分支)到發(fā)布分支。與主干長期并行的特性分支極為少見趟佃。為了保證主干上線后的有效性扇谣,一般會(huì)使用特性切換(feature toggle,灰度放量控制)闲昭。特性切換就像一個(gè)開關(guān)可以在運(yùn)行期間隱藏罐寨、啟用或禁用特定功能,項(xiàng)目團(tuán)隊(duì)可以借助這種方式加速開發(fā)過程序矩。
特性切換在大型項(xiàng)目持續(xù)交付中變得越來越重要鸯绿,因?yàn)樗兄趯⒉渴饛陌l(fā)布中解耦出來。特性切換會(huì)導(dǎo)致代碼更脆弱贮泞、更難測試楞慈、更難理解和維護(hù)、更難提供技術(shù)支持啃擦,而且更不安全囊蓝。越來越多的特性切換會(huì)使得邏輯越來越混亂。
特性切換需要健壯的工程過程令蛉、可靠的技術(shù)設(shè)計(jì)和成熟的特性切換生命周期管理聚霜,如果不具備這三個(gè)關(guān)鍵的條件狡恬,使用特性切換反而會(huì)降低生產(chǎn)力。
優(yōu)點(diǎn):1蝎宇、頻繁集成弟劲,每次集成沖突少,集成效率高 2姥芥、享受持續(xù)交付帶來的好處 3兔乞、無需在分支間切換
缺點(diǎn):1、太多人工作在主干上凉唐,bug代碼是災(zāi)難 2庸追、借助特性切換保證線上運(yùn)行正確性,引入新問題
特性分支開發(fā)
git flow
線上部署使用master分支台囱,develop分支用來集成淡溯,feature分支用來開發(fā)。
github flow
GitHub Flow 是 GitHub 所使用的一種簡單流程簿训。該流程只使用 master 和特性分支咱娶,并借助 GitHub 的 pull request 功能。
在 GitHub Flow 中强品,master 分支中包含穩(wěn)定的代碼膘侮,它已經(jīng)或即將被部署到生產(chǎn)環(huán)境。任何開發(fā)人員都不允許把未測試或未審查的代碼直接提交到 master 分支的榛。對代碼的任何修改喻喳,包括 Bug 修復(fù)、熱修復(fù)困曙、新功能開發(fā)等都在單獨(dú)的分支中進(jìn)行。不管是一行代碼的小改動(dòng)谦去,還是需要幾個(gè)星期開發(fā)的新功能慷丽,都采用同樣的方式來管理。
當(dāng)需要修改時(shí)鳄哭,從 master 分支創(chuàng)建一個(gè)新的分支要糊,所有相關(guān)的代碼修改都在新分支中進(jìn)行。開發(fā)人員可以自由地提交代碼和提交到遠(yuǎn)程倉庫妆丘。當(dāng)新分支中的代碼全部完成之后锄俄,通過 GitHub 提交一個(gè)新的 pull request。團(tuán)隊(duì)中的其他人員會(huì)對代碼進(jìn)行審查勺拣,提出相關(guān)的修改意見奶赠。由持續(xù)集成服務(wù)器(如 Jenkins)對新分支進(jìn)行自動(dòng)化測試。當(dāng)代碼通過自動(dòng)化測試和代碼審查之后药有,該分支的代碼被合并到 master 分支毅戈。再從 master 分支部署到生產(chǎn)環(huán)境苹丸。GitHub Flow 的好處在于非常簡單實(shí)用,開發(fā)人員需要注意的事項(xiàng)非常少苇经,很容易形成習(xí)慣赘理。當(dāng)需要修改時(shí),只要從 master 分支創(chuàng)建新分支扇单,完成之后通過 pull request 和相關(guān)的代碼審查商模,合并回 master 分支就可以了。
GitLab Flow
GitLab Flow 針對不同的發(fā)布場景蜘澜,在 GitHub Flow(特性分支加 master 分支)的基礎(chǔ)上做了改良施流,額外衍生出了三個(gè)子類模型。
1兼都、帶生產(chǎn)分支嫂沉。無法控制準(zhǔn)確的發(fā)布時(shí)間,又要不停集成扮碧。2創(chuàng)建一個(gè)production分支方式發(fā)布代碼
2趟章、帶環(huán)境分支。要求所有代碼都在逐個(gè)環(huán)境中測試通過慎王,為不同環(huán)境創(chuàng)建不同分支
3蚓土、帶發(fā)布分支。用戶對外界發(fā)布軟件的項(xiàng)目赖淤,同時(shí)需要維護(hù)多個(gè)發(fā)布版本(android發(fā)版)蜀漆,盡可能晚從master拉取發(fā)布分支,bug修改先提交到master咱旱,cherr-pick到release分支
分支開發(fā)的的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):1确丢、不同功能在獨(dú)立分支開發(fā),消除了功能穩(wěn)定前彼此干擾的問題 2吐限、容易保證主干分支的質(zhì)量鲜侥,只要不把沒有開發(fā)的特征分支合并入主干分支,主干分支就不會(huì)有問題的功能
缺點(diǎn):1诸典、不及時(shí)merge描函,特性分支合并到主干分支會(huì)比較麻煩 2、如果做CI/CD狐粱,需要對不同分支配備不同的構(gòu)建環(huán)境