分支與合并
實際軟件開發中,并行開發有多種場景,也會為這些場景制定對應的分支策略。不論使用哪種分支策略,都是基于某個分支編譯(或不需要編譯)產生部署包,用這個部署包發布到對應的環境。根據分支是否需要集成,可以簡單描述為:
單分支模式:基于一個分支進行代碼提交,并最終發布。如特性分支發布、純主干模式都是這種方式。
分支集成模式:基于多個分支并行開發,然后集成后進行發布。集成時,根據不同的業務場景,又有兩種處理方式:
–分支集成后可以靈活退出,這時發布分支通常是使用動態的短分支,發布后發布分支即可刪除。
–需要有一個分支展示代碼的最新集成狀態及結果,如 gitflow 模式,dev 是一個長分支,是代碼的最新集成狀態。
在分支集成模式下,會有這樣一個場景,發布分支(release 分支)的特性組成是動態的。對于增加特性分支(feature 分支)在操作上相對簡單,合并新的特性分支到發布分支就可以了。但對于已經集成到發布分支的,可能會由于市場策略調整或甲方的一個變更,延遲發布或取消發布。也可能某個特性分支存在嚴重問題,需要取消發布。這時候就需要把已經合并到發布分支的特性分支剔除。
使用 Git 命令或代碼托管平臺可以完成發布分支的創建、合并,但在特性分支需要靈活退出時,需要確定正確的發布分支,若沒有工具平臺支撐,手工操作繁瑣且容易出錯。
云效解決方案
云效 Flow 對分支模式提供了強有力的支持:用戶只需要關心集成和發布哪些 feature 分支,而對 release 分支創建和管理、分支合并、發布等一系列工作,都可以托付給 Flow 完成。
立即體驗:云效流水線Flow
本節內容詳細介紹分支模式下,各(類)分支的使用方式。
master 代表最新發布版本
一般情況下, master 分支代表最新發布版本。當需要最新發布版本的內容時,直接取分支末端即可。
不論其他哪類分支,都建議一般從 master 分支創建,并且經常從 master 分支合并,以便跟上“潮流”,減少將來集成時的各種問題,比如代碼合并沖突。
每當軟件正式發布前,系統會確保它基于 master 最新。
每當軟件正式發布后,系統會把相應內容合并回 master,以便讓 master 分支始終代表最新發布版本。
一般來說,使用者不要直接“寫”東西到master分支。把“寫”的工作交給系統適時自動完成。
在各 feature 分支上開發
一條 feature 分支(又稱變更分支、開發分支),通常用來承載一個缺陷的修復,或者一個需求(如果不是很大的話)的開發,或者任務分解后一個任務的開發。
一般來講,基于 master 分支最新版本創建 feature 分支。然后在 feature 分支上開發、測試,直到這個 feature 功能完成,質量 OK,準備好去集成和發布。
release 分支上的集成
release 分支用于集成和發布。基于 master 分支最新版本創建一條 release 分支,然后把想要集成的各條feature分支合并到這條release分支,進行部署和測試工作。
如果有新的 feature 分支要加入本次集成,那就把它也合并進這條 release 分支,然后再次部署并測試。
如果測試發現問題,就到 feature 分支上修復,然后把它再次合并到 release 分支,把修復帶到 release 分支。
當然如果一個 feature 的問題太多太大,那干脆就放棄它。也就是說,新建一條 release 分支,把其他 feature 分支都合并過去,唯獨不再合并這條 feature 分支。
就像 master 分支一樣,release 分支也是由系統自動管理的。使用者不要直接在上面改代碼,代碼修改請總是在 feature 分支完成。
release 分支上的發布上線
當 release 分支上的質量足夠好,本次想上線的功能也都具備之后,就要考慮發布上線的問題啦。如前面講的,發布上線前,會確保它基于基礎分支(常見的如 master )最新。而發布后會把 release 分支合并回 master,讓 master 代表最新發布版本。
以上幾節介紹的內容,見下圖:
多個環境/流程時
假定要想集成發布上線,要經過日常測試環境上的測試這個流程,還要經過預發環境上的測試這個流程,那么兩個流程用一條 release 分支就有些不合適。因為兩個流程可能同時在測不同的 feature 分支集合。
分支模式用這個辦法避免這個問題:每一個測試環境,也就是每個流程,關聯它自己的 release 分支。日常測試、預發測試這兩個環境(也就是兩個流程),分別關聯兩條 release 分支。這樣就不會相互影響。推而廣之,為正式運行環境,也對應一條release分支。也就是說,每個環境都有對應的 release 分支。
當把集成成果從一個環境傳遞到下一個環境時,就是把一個環境下已合并到一起的 feature 分支,再往另一個環境對應的 release 分支上合并一遍……這么做有點兒笨。系統實際的做法是,基于 master 分支創建另一個環境對應的 release 分支,然后把前一個環境對應的 release 分支合并到新的 release 分支上。
本節介紹的內容,對應下圖:
以上就是關于分支模式這種研發模式的原理性介紹,以下我們看一下如何在流水線中使用分支模式。
如何在云效 Flow 中使用分支模式
編排流水線
立即體驗:云效流水線Flow
流水線的新建方式與其他流水線相同,當新建流水線時選擇了開啟分支模式,就會自動創建包含分支管理器的分支模式流水線。
新建流水線。
添加代碼源,以使用Codeup為例,選擇代碼庫,選擇開啟分支模式,然后點擊添加。
添加完成后,在流程配置頁面可以看到自動添加了第一個階段分支管理器。在分支管理器中設置基礎分支,基礎分支默認是 master。基礎分支是發布分支的創建來源。發布分支從基礎分支創建,然后合并運行分支。分支管理器只能是在第一個階段配置,且在這個階段不能配置并行任務。若有多版本發布需求,如 1.0,2.0,這里的基礎分支可以設置為 master1.0,master2.0,實現多版本發布的流水線。
運行流水線
流水線配置完成后,就可以開始運行了。
點擊保存并運行后,在運行配置彈窗中添加運行分支。
進入添加運行分支對話框,選擇運行分支后添加。如需添加多個分支可重復步驟一和二。
運行分支添加完成后,就可以開始運行。在分支管理器中可以查看執行結果及日志。若合并沖突,需要根據提示解決沖突后繼續運行。通過流水線源的分支詳情或分支管理器的分支詳情可以查看創建的 release 分支及運行分支信息。
再次運行時,可以選擇繼續添加分支或刪除已集成分支。
刪除已集成分支,執行流水線時將會進行以下操作:
基于分支管理器中設置的基礎分支(如 master),創建新的 release 分支。
除了該特性分支外,配置中的其他分支合并到 release 分支。
基于 release 分支的最新內容運行流水線。