主頁 > 軟體工程 > 多分支集成發布各種坑怎么填?| 云效

多分支集成發布各種坑怎么填?| 云效

2022-01-17 17:53:09 軟體工程

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

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

一個特性開發完成后就提交測驗,這個程序不影響其他特性的正常開發,全部已完成的特性全部合并進行測驗和發布,在提交測驗,集成合并時碰到了這樣的問題:

  • 對于某個公共模塊的修改出現了合并沖突
  • 由于一個特性分支的集成,導致整個版本集成失敗

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

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

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

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

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

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

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

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

小明可以直接在再次運行分支時,洗掉已集成分支,執行流水線時將會自動進行以下操作:

  • 基于分支管理器中設定的基礎分支(如 master),創建新的 release 分支
  • 除了該特性分支外的其他在云效配置中的其他分支合并到 release 分支
  • 基于 release 分支的最新內容運行流水線

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

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

云效 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 代表最新發布版本,

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

 

image.png

 

多個環境/流程分支原理

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

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

當把集成成果從一個環境傳遞到下一個環境時,就是把一個環境下已合并到一起的 feature 分支,再往另一個環境對應的 release 分支上合并一遍……這么做有點兒笨,對于人工處理這是一個重復操作的程序,云效會幫你自動完成這一系列重復的操作,

對應下圖:

 

image.png

 

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

云效 Flow 分支模式實踐

編排流水線

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

1、新建流水線

2、添加代碼源,以使用「云效Codeup」為例,選擇代碼庫,選擇「開啟分支模式」,然后點擊「添加」

 

image.png

 

3、添加完成后,在「流程配置」頁面可以看到第一個階段「分支管理器」,在分支管理器中設定基礎分支,基礎分支默認是 master,基礎分支是發布分支的創建來源,發布分支從基礎分支創建,然后合并運行分支,「分支管理器」只能是在第一個階段配置,且在這個階段不能配置并行任務,

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

 

image.png

 

運行流水線

流水線配置完成后,就可以開始運行了,

1、在運行配置中,添加運行分支,

 

image.png

 

2、進入添加運行分支對話框,選擇運行分支,若在代碼源選擇的其他代碼庫,這里輸入運行分支,

 

image.png

 

 

image.png

 

可以添加多個分支,

 

image.png

 

3、運行分支添加完成后,就可以開始運行,在「分支管理器」卡片中可以查看執行結果及日志,若合并沖突,需要根據提示解決沖突后繼續運行,

通過「源」的「查看分支」或「分支管理器」卡片的「分支詳情」可以查看創建的 release 分支及運行分支資訊,

 

image.png

 

 

image.png

 

4、再次運行時,可以選擇繼續添加分支或洗掉已集成分支,

 

image.png

 

洗掉已集成分支,執行流水線時將會自動進行以下操作:

  • 基于分支管理器中設定的基礎分支(如 master),創建新的 release 分支
  • 除了該特性分支外的其他在云效配置中的其他分支合并到 release 分支
  • 基于 release 分支的最新內容運行流水線

小結

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

靈活的特性分支:

  • 分支可以自由地靈活組合,選擇任意一個或多個分支進行組合集成,
  • 分支可以靈活地退出,將某個不需要的或有干擾的分支踢出當前集成/環境,
  • 分支可以靈活地加入,將某個需要增加的分支添加到進去,
  • 分支可以按環境/流程,自由地集成,可以跳過中間的測驗階段、預發階段直接部署到正式環境,這個在緊急修復問題時效率較高,

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

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

點擊下方鏈接立即體驗云效流水線Fiow,

https://www.aliyun.com/product/yunxiao/flow?channel=practice

 

lQLPDhsGzb2HRiHNBDjNB4CwPRTOVsFHvw0B29IABwA0AA_1920_1080.png

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/413109.html

標籤:其他

上一篇:devops起源的各種ops概念

下一篇:工業軟體技術的總結和開發方向

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more