主頁 > 軟體工程 > CODING 代碼多倉庫實踐

CODING 代碼多倉庫實踐

2020-09-11 11:45:21 軟體工程

關于代碼的管理問題已經討論多年,隨著企業業務的復雜度提高、軟體行業技術堆疊的選擇度變寬泛,現代軟體的代碼倉庫也變得越來越龐大和復雜,一個中型專案,將測驗代碼、核心業務代碼、編譯構建、部署打包等基礎設施的代碼全部加起來,幾十萬行都是家常便飯,并且一個專案往往由多個團隊進行協作,如何讓多團隊在對同一個專案的代碼進行協作時不會相互干擾、相互制約,也是每個企業研發團隊在實踐中不斷摸索的難題,

多倉庫與單倉庫

對于上文所說的一些問題,業界已經歸納了常見的代碼倉庫存放方式,常見的如單倉庫和多倉庫,大部分企業會針對不同的專案采用不同的倉庫管理機制,所以對于企業來說,經常會兩種方式并存:

  • 單倉庫

將所有專案代碼存放在一個代碼倉庫當中,這個好處在于專案的所有開發者可以共享看到專案中的所有代碼;在專案規模較小的時候,一個庫可以更好地管理和維護,發版本只要統一發布即可;對于持續集成,也只需要針對一個庫維護若干條流水線,但再好的實踐以及工具都有它適用的范圍,Git 已經是非常流行的代碼托管工具,但 Git 會把所有歷史記錄以及代碼同步到各個用戶的本地機器,所以對于大型專案而言,如果使用單倉庫,就意味著某個模塊開發者的本地可能有大量冗余代碼和提交記錄的資訊,這個時候拆分成更小的庫顯得更加合適,

谷歌與 Facebook 就是業界典型的單倉庫派代表,作為代碼行數已經超過數十億行、commit 數量累計達到千萬次的團隊(2015 年的統計資料),如果沒有強悍的基礎設施,也很難運轉順利,Google 曾發表論文介紹其強大的代碼管理系統 Piper 以及客戶端工具 CitC,但對于大部分企業來說是否有必要投入如此之大的研發成本去自研一個代碼管理系統值得商榷,所以谷歌的實踐對于大部分企業來說不一定具備參考性,

圖片
*谷歌代碼倉庫每周的提交數量

  • 多倉庫

將專案代碼進行一定的拆分放在多個庫當中,好處就是將代碼進行一定的解耦,對于體型較為龐大的專案來說管理上會更加清晰和富有彈性,將代碼按照一定邏輯分庫之后,倉庫與模塊有了自描述的特征,讓一起協作的開發者可以一目了然,發布原始碼版本、持續集成構建時,負責各倉庫的研發組織可以按照自己的節奏來發布,同時將一些“壞代碼”的影響控制在某個倉庫中,而不會影響專案全部代碼,分庫也有要注意的地方,在同一個專案里的代碼多多少少都有業務上或者是技術上的聯系,比如編譯依賴:以一個Java 專案為例,客戶端介面的呼叫代碼究竟是直接依賴服務端介面代碼的定義,還是間接依賴?如果是間接依賴,那么分庫管理是非常方便的,但同時客戶端就無法快速感知到服務端介面定義的變化,所以在進行多倉庫劃分時,要注意劃分的一些常用原則,

多倉庫在業界使用的非常廣泛,在騰訊、華為、阿里的開源專案中我們都能看到,比如騰訊的 Tars 開源專案(RPC 開發框架)就按照不同編程語言以及技術堆疊進行了分庫:包括 Java、Go、PHP 等子專案,作為開源專案,一個清晰的分庫可以讓開發者更好地協作,避免不必要的溝通成本,

圖片
*Tars 的開源專案子倉庫

CODING 的多倉庫實踐

CODING 在多倉庫實踐上也遇到過問題,由于前端、后端、git-server 三個模塊的代碼放置在同一倉庫中,以至于代碼版本的 tag 需要保持同步,制約了各個團隊的開發節奏,每個模塊的進度都得齊頭并進,才能保證最終版本是一致的,盡管它們在業務上緊密相連,但實際上這幾個模塊本身沒有編譯依賴,所以在沒有多倉庫功能時,我們只能建立了三個專案,使用三個專案的代碼倉庫能力,只集中在一個專案當中進行專案管理作業,

在千呼萬喚中,CODING 近期終于正式上線了多倉庫功能,我們的開發人員也終于可以告別傻乎乎地使用一個專案進行管理,又用多個專案進行代碼倉庫管理的尷尬問題,我們將那些沒有編譯依賴的專案,但在業務上又有聯系的代碼倉庫,放置在同一專案的多倉庫下,開發人員無需在多個專案中切換,

圖片

多倉庫功能一直是 CODING 想要投入做的一個特性,隨著近幾年 CODING 企業用戶的快速增長,CODING 的架構也面臨著持續的挑戰,如何讓交付更加順滑,讓特性更快、更好地服務開發者,是我們進行架構演進的初衷,所以我們在很早之前就開始了容器化、微服務化的規劃與實施,而在微服務化的程序當中,包括代碼倉庫管理在內的研發流程與組織方式也在配套前進著,多倉庫這項基本能力就可以讓多個微服務獨立存放在獨立的代碼倉庫當中,配套獨立的持續集成流水線,讓架構演進變得水道渠成,我們知道很多企業用戶對多倉庫有很大訴求,CODING 的多倉庫已正式上線,歡迎大家前去體驗,

業界常用實踐

綜上我們可以看到,代碼倉庫的組織方式往往和人員組織架構息息相關,而且代碼庫的拆分也往往和軟體架構的演進息息相關,在現代軟體架構逐漸由單體朝著分布式、微服務演化時,代碼倉庫和研發團隊的粒度也在逐漸變小,從以前的集中式慢慢變為網狀,但無論是單倉庫還是多倉庫,最終目的都是為了讓開發者更加高效地進行研發,那究竟該如何選擇?筆者總結了幾條業界的通用實踐來供大家思考:

  • 技術堆疊不同的模塊建議多庫存放

不同技術堆疊的編譯環境、構建環境、發布環境往往不同,代碼之間的硬性依賴也不大,可以考慮分庫存放,大部分的開發者還是傾向于在作業中持續使用某一種熟悉的編程語言,所以按照技術堆疊劃分是一個常用的實踐,

  • 倉庫的粒度最好和組織架構相匹配

拆庫要拆到什么粒度呢?有些研發組織微服務化后,給每個微服務都分配了一個代碼庫,隨著拆分深入,一個專案積攢了幾百個代碼庫,但一個 two-pizza 團隊往往會負責多個微服務,不僅僅是一個,所以建議不要盲目使用大量代碼庫,避免到后期難以管理,可以考慮按照團隊組織來劃分代碼倉庫,

  • 拆庫并不意味著建立部門墻

不少企業代碼拆分之后可能順便就把團隊之間的代碼權限也做了劃分,建議研發團隊慎重考慮,關閉了代碼權限就意味著,團隊與團隊之間不再互相 review 代碼,相應的作業上的交流也會逐漸減少,如果讀者的企業屬于內部開放型氛圍的公司,或者想要成為開放型的公司,那么關于此點請三思,

reference:
https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext

點擊立即體驗 CODING 多倉庫功能

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

標籤:其他

上一篇:來來來,告訴你一個簡單易上手的KPI打分的方子

下一篇:軟體開發工具(第9章:使用Eclipse進行C/C++開發)

標籤雲
其他(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