標籤:

分支集成加速器Light Merge在攜程的應用

分支集成加速器Light Merge在攜程的應用

來自專欄攜程技術中心

本文分析了Ctrip 代碼平台提供的集成加速器(Light Merge,簡稱LM)產生的背景及其特點,並具體說明了LM在多特性分支上線流程中發揮的作用。LM 給不使用特性開關的項目的集成與上線,提供了一種高效便捷的解決方案。

我們期待更多的Ctrip 團隊能夠享受到LM的服務,也希望 LM 能為同行的代碼集成提供有效的參考,讓研發的集成儘可能不那麼繁瑣,不那麼低效。

Ctrip研髮狀況和面臨的問題

  • 項目通常有多個功能一起開發,開發的初期為了減少彼此干擾,會為每個功能創建特性分支。
  • 受研發不可控因素的影響,對於未來的某個時間點,多個特性功能存在是否能集成的問題。
  • 各特性分支進入到穩定階段,必然需要merge在一起,然後一起被編譯、打包和測試。怎麼讓這個過程更加自動化呢?
  • 多個特性分支,難免會修改公用文件,如果不及時關注公共文件的變化,以後各特性分支之間可能出現難merge的情況。

Ctrip主流開發模式及分支模型

  • 採用特性分支開發模式。
  • 主推的分支模型:
  1. master 分支為最核心的集成分支,用於上線。
  2. master 分支的任何一個 commit,符合質量要求。
  3. 統一從 master 拉取新分支 。
  4. 與Paas集成後,統一省略環境分支。

單個特性分支怎麼合入master分支?

為了保證集成分支的質量,在 gitlab 上集成分支通常都被保護起來(protected),不允許直接 push 到被保護的分支。不過,我們可以通過發起 Merge Request 的方式把特性分支合入到集成分支 。藉助 MergeRequest,我們可以完成 sonar 靜態檢查、代碼review 等質量管理的活動。

多個特性分支會給集成帶來哪些問題?

  • 不同分支可能會修改相同文件,集成時很可能出現代碼衝突。
  • A、B兩個分支先後合入到集成分支,B合入後導致A分支對應的功能發生故障。
  • A 合入到集成分支後可能需要一套測試環境;B 合入到集成分支後也可能再需要一套測試環境。多特性分支分別合入集成分支所需的測試環境也多。

靠什麼快速發現多特性分支集成問題?

LightMerge 功能及特點

  • 合併衝突自動告警
  • 多分支自動merge
  • 自由選擇需集成的特性分支
  • 高效定位可集成的特性分支的最大集合
  • 設置非常簡單
  • 支持 CI
  • 與 Merge Request有機結合

LightMerge和Merge Request的關係

  • MergeRequest 是正式的 merge 請求,在開發的某個時機,用來把一個分支合入到另一個分支。
  • LightMerge 服務於開發的過程,在不影響任何一個分支的基礎上,把>=兩個分支做集成,發現衝突及時通知當事人;一旦某個分支發生變化, LightMerge 立即重新merge、檢查並通知。
  • 當它倆在一起工作時,可以大大提升團隊集成的效率與質量。

多特性分支上線流程(推薦)

說明:

1)F01、F02和F03三個功能,每個功能對應一個特性分支,並行開發。

2)三個特性分支的開發人員通過自測後,各自發起了合入到master 的 merge request。此時,團隊可以做codereview,sonar靜態掃描等檢查活動。

3)於此同時,負責集成的人員藉助 Light Merge,構建、打包並測試後發現F01和 F03的功能集成後可以一起上線,而集成F02 後發現有問題。

4)最後,F01→master 及 F03→master 的兩個 Merge Request 被接納,而 F02→master 的 Merge Request 被拒絕。

上面第3)點在確定哪些特性分支可以一起上線的過程中,可以藉助Light Merge。

代碼平台上Light Merge設置如圖A:

圖A

如果自動集成時代碼發生衝突,則web上會提示衝突,也會Email通知給相關人員。如F01和F02分支修改了同文件的同一行,LightMerge自動merge後web提示信息如圖B:

圖B

郵件提示信息如圖C:

圖C

文件衝突解決後,如果設置了CI,則集成後的代碼會自動編譯、打包並部署到FAT測試環境。團隊成員可根據測試結果主動調整Light Merge的特性分支的集合(也就是Source Branches),直到篩選出最大的集合,該集合對應的功能通常就是下一個發布版本可發布的功能集。

至於這幾個特性分支一起集成到master的方式,有兩種做法:

結束語

對於不使用特性開關的項目(上線後所有功能都會啟用),我們必須保證上線後各個功能正確且有效,這對集成的效率和質量提出較高的要求。

在對多個特性分支做集成的時候,如果不藉助Light Merge類似的工具,負責集成的人員需要做許多繁瑣又重複的活動;反之,只需簡單的調整需參加集成的特性分支的集合,就能靠Light Merge自動完成這些特性分支代碼的集成、構建、部署,甚至自動化測試,從而篩選出用於上線的特性分支。因此,我們稱 Light Merge 是分支集成的加速器。

Light Merge功能目前已被Ctrip諸多項目團隊作為分支集成的加速器,我們期待更多的團隊能夠享受到它帶來的便利。

【作者簡介】蘇玲,5年軟體配置管理及6年持續集成經歷。曾在蘇州科達科技和大眾點評任資深配置管理工程師,目前為攜程代碼中心負責人,專註於代碼相關的平台建設,致力於提高研發效率與研發質量。

更多來自攜程技術人的一手乾貨,歡迎搜索關注「攜程技術中心」微信公號。


推薦閱讀:

俺過去的一些小製作及代碼和尚編輯
代碼888
光臨代碼###
回復貼圖代碼彙編2

TAG:代碼 |