多分支整合發布各種坑怎麼填?

2022-09-18 16:06:16 字數 3669 閱讀 8235

簡介:一文為你詳細介紹雲效分支模式的原理及實踐,雲效 flow 這套靈活高效的分支模式可以讓使用者只關心整合和發布哪些特性分支,而對發布分支建立和管理、分支間合併等一系列工作,託付給雲效完成。

小明的研發團隊要發布乙個版本,這個版本包含了多個功能特性,每個不同的特性之間有較強的獨立性。不同的特性由不同的開發人員或開發小組分工完成。

他們在不同的特性分支上開發,彼此相互獨立、互不影響。

乙個特性開發完成後就提交測試,這個過程不影響其他特性的正常開發,全部已完成的特性全部合併進行測試和發布。在提交測試,整合合併時碰到了這樣的問題:

版本發布時間在即,為不影響整體進展,需要快速分離影響了整個整合的那個特性分支。

如果你是小明,這時你會怎麼做?

小明的研發團隊又要發布乙個版本,整個版本有 a、b、c、d 四個功能特性一起合併整合,分別在分支 a、b、c、d 上開發。臨近發布前,市場側通知由於某種原因功能特性 b 不能發布,也就是這次發布需要剔除分支 b。按照嚴格的整合發布策略,a、c、d 這 3 個特性分支需要重新構建,分別再經過整合測試、預發驗證,然後到生產發布。但是,這樣做是有成本的。

如果你是小明,在效率和質量之間你會怎麼選?

這兩個情景遇到的問題,在多分支並行開發整合發布中很常見,如何快速、靈活、高效又實用地解決這類問題,成為眾多小明的剛需。

阿里巴巴集團內部經歷並仍在經歷著大量多分支整合發布的實踐,這些實踐被提煉成了一套阿里的分支策略,形成了阿里分支模式,並通過公共雲產品雲效 flow 對外部研發使用者輸出。

當使用雲效flow 分支模式時,小明的兩個場景問題將可以得到靈活高效地解決。

場景一:如何快速分離影響整個整合的那個特性分支

小明可以直接在再次執行分支時,刪除已整合分支,執行流水線時將會自動進行以下操作:

場景二:發布在即需求被砍,如何平衡效率和質量?

小明發現雲效分支可以按環境/流程,自由地整合,考慮到本次上線的時間對後續專案進度非常關鍵,小明選擇了跳過中間的測試階段、預發階段直接部署到正式環境,為了最大程度避免質量風險,小明還使用了雲效flow的發布前人工審核卡點能力,最終變更沒有耽誤正常發版,也未出現任何風險。

下面詳細介紹雲效分支模式原理及實踐。

一般情況下,master分支代表最新發布版本。當需要最新發布版本的內容時,直接取分支末端即可。

不論其他哪類分支,都建議一般從 master 分支建立,並且經常從 master 分支合併,以便跟上「潮流」,減少將來整合時的各種問題,比如**合併衝突。

每當軟體正式發布前,系統會確保它基於 master 最新。

每當軟體正式發布後,系統會把相應內容合併回 master,以便讓 master 分支始終代表最新發布版本。

一般來說,使用者不要直接「寫」東西到master分支。把「寫」的工作交給系統適時自動完成。

一條 feature 分支(又稱變更分支、開發分支),通常用來承載乙個缺陷的修復,或者乙個需求(如果不是很大的話)的開發,或者任務分解後乙個任務的開發。

一般來講,基於 master 分支最新版本建立 feature 分支。然後在 feature 分支上開發、測試,直到這個 feature 功能完成,質量 ok,準備好去整合和發布。

release 分支用於整合和發布。基於 master 分支最新版本建立一條 release 分支,然後把想要整合的各條feature分支合併到這條release分支,進行部署和測試工作。

如果有新的 feature 分支要加入本次整合,那就把它也合併進這條 release 分支,然後再次部署並測試。

如果測試發現問題,就到 feature 分支上修復,然後把它再次合併到 release 分支,把修復帶到 release 分支。

當然如果乙個 feature 的問題太多太大,那乾脆就放棄它。也就是說,新建一條 release 分支,把其他 feature 分支都合併過去,唯獨不再合併這條 feature 分支。

就像 master 分支一樣,release 分支也是由系統自動管理的。使用者不要直接在上面改**,**修改請總是在 feature 分支完成。

當 release 分支上的質量足夠好,本次想上線的功能也都具備之後,就要考慮發布上線的問題啦。如前面講的,發布上線前,會確保它基於基礎分支(常見的如 master )最新。而發布後會把 release 分支合併回 master,讓 master 代表最新發布版本。

以上幾節介紹的內容,見下圖:

假定要想整合發布上線,要經過日常測試環境上的測試這個流程,還要經過預發環境上的測試這個流程,那麼兩個流程用一條 release 分支就有些不合適。因為兩個流程可能同時在測不同的 feature 分支集合。

分支模式用這個辦法避免這個問題:每乙個測試環境,也就是每個流程,關聯它自己的 release 分支。日常測試、預發測試這兩個環境(也就是兩個流程),分別關聯兩條 release 分支。這樣就不會相互影響。推而廣之,為正式執行環境,也對應一條release分支。也就是說,每個環境都有對應的 release 分支。

當把整合成果從乙個環境傳遞到下乙個環境時,就是把乙個環境下已合併到一起的 feature 分支,再往另乙個環境對應的 release 分支上合併一遍……這麼做有點兒笨。對於人工處理這是乙個重複操作的過程,雲效會幫你自動完成這一系列重複的操作。

對應下圖:

以上就是關於分支模式這種研發模式的原理性介紹,以下我們具體看一下如何在雲效流水線中使用分支模式。

流水線的新建方式其他流水線相同,當新建流水線時選擇了「開啟分支模式」,就會自動建立包含【分支管理器】的分支模式流水線。

1、新建流水線

2、新增**源,以使用「雲效codeup」為例,選擇**庫,選擇「開啟分支模式」,然後點選「新增」

3、新增完成後,在「流程配置」頁面可以看到第乙個階段「分支管理器」。在分支管理器中設定基礎分支,基礎分支預設是 master。基礎分支是發布分支的建立**。發布分支從基礎分支建立,然後合併執行分支。「分支管理器」只能是在第乙個階段配置,且在這個階段不能配置並行任務。

若有多版本發布需求,如 1.0,2.0,這裡的基礎分支可以設定為 master1.0,master2.0,實現多版本發布的流水線。

流水線配置完成後,就可以開始執行了。

1、在執行配置中,新增執行分支。

2、進入新增執行分支對話方塊,選擇執行分支。若在**源選擇的其他**庫,這裡輸入執行分支。

可以新增多個分支。

3、執行分支新增完成後,就可以開始執行。在「分支管理器」卡片中可以檢視執行結果及日誌。若合併衝突,需要根據提示解決衝突後繼續執行。

通過「源」的「檢視分支」或「分支管理器」卡片的「分支詳情」可以檢視建立的 release 分支及執行分支資訊。

4、再次執行時,可以選擇繼續新增分支或刪除已整合分支。

刪除已整合分支,執行流水線時將會自動進行以下操作:

簡單來說,flow 分支模式可以自由地組合特性分支,與各自環境的發布分支做整合。

靈活的特性分支:

靈活的特性分支當然也存在著問題,由於可以跳過中間的整合環境/流程,也就帶來了未經過驗證的**發布上線的可能性,這時可以考慮使用雲效flow發布前人工卡點的能力,讓發布多一層質量保障。

分支策略的選擇沒有絕對的正確和錯誤之分,關鍵是與專案規劃、發布節奏相匹配,在實際開發專案中找到乙個可以兼顧效率、質量、簡單實用的選擇。

分支結構 多分支結構

多分支結構 一般針對的是乙個連續區間段的不停的處理操作 語法結構 if 條件表示式1 條件執行體1 elif 條件表示式2 條件執行體2 elif 條件表示式n 條件執行體n else 條件執行體n 1 注意這邊的選擇與c中一樣至多只會執行其中的乙個語句執行體 python中允許多分支語句沒有els...

Pyrhon 單分支和多分支

輸入 personheight input 請輸入身高 m personheight float personheight personweight input 請輸入體重 kg personweight float personweight personage input 請輸入年齡 person...

Shell多分支if語句

一 語法 if 條件判斷式 then 當條件判斷式1成立時,執行程式1 elif 條件判斷式2 then 當條件判斷式2成立時,執行程式2 省略更多條件 else 當所有條件都不成立時,最後執行程式 fi 二 實現計算器 bin bash read t 30 p please input num1 ...