《工程&研發 - 3 - 毛遠俊 - 得物前端monorepo技術架構與實踐.pdf》由會員分享,可在線閱讀,更多相關《工程&研發 - 3 - 毛遠俊 - 得物前端monorepo技術架構與實踐.pdf(43頁珍藏版)》請在三個皮匠報告上搜索。
1、得物前端monorepo技術架構與實踐遠俊得物客服前端負責遠俊深耕前端余年,專注于業務,曾在唯品會、蘑菇街和阿巴巴作過21年加得物,前主要負責得物客服前端中后臺體系的建設0102030405背景:散亂且低效的代碼復基:統多端的分模型架構:倉研發流程的設計遷移:平滑式的迭代與遷移并存收益:倉帶來的成效什么是monorepo?將多個項的源代碼、依賴和構建配置等都放在個倉庫中管理 倉庫中的項可以相關,也可以完全獨GitlabAPP1APP2APP3APP4APPAPP1APP2APP3APP4polyrepomonorepo背景:散亂且低效的代碼復得物前端架構的現狀業務發展快:團隊規模從10+到10
2、0+,應數量從10+到150+代碼復難:不同業務域中應重復功能模塊代碼重復多,難復基礎能升級難:通的npm組件包依賴,升級進度很難把控構建問題定位難:不同應構建腳本不致,出現問題定位難快&難協作效率低下:不同團隊代碼格不致,輪崗上成本倉monorepo技術調研國外最佳實踐 Google:Piper+Citc Meta:Mercurial+VSCode pnpm workspace/yarn workspace lerna/rush/changesets turborepo/nx workspace社區常的解決案依賴管理發包管理命令腳本管理pnpm workspace+changesets+tu
3、rborepo基:統多端的分模型 如何管理不同端及不同業務的代碼件 如何實現倉代碼的按需拉取如何管理不同端及不同業務的代碼件.deps:不同端的依賴,B端、C端和Node服務 ah5/anode/apps:不同端的錄,存放不同業務域應 packages:倉頂層通組件和功能依賴,包括組件、utils shell:不同端的構建腳本件 business:具體的業務域,如商家、客服 _share:當前業務域下通的基礎能,包括組件、utils crm:具體應錄如何實現倉代碼的按需拉取git sparse checkout:稀疏檢出,根據檢出件配置下載所需要的件sparse-checkout配置件spar
4、se-checkout拉取代碼步驟最終拉取的應錄如何實現倉代碼的按需拉取簡化執步驟:命令具CLI+VSCode插件命令具CLIVSCode插件架構:倉研發流程的設計 權限管理 統的研發流程 單元測試 主研發流程權限管理-存在的問題倉下的代碼是所有研發可的,研發可以改任何錄下的代碼 實習萬不刪除了核代碼,提交了怎么辦 不同業務研發改了不相關的代碼,不提交了怎么辦權限管理-解決案基本權限約束流程約束 權限 分保護 件Owner Git hook校驗權限管理-基本權限約束Owner:代碼倉庫的所有者,般為TLMaintainer:代碼倉庫的維護者,般為TL/PMDeveloper:代碼倉庫的開發者,
5、般為研發員保護分研發本地沒法直接提交release-*hotfix-*master權限管理-基本權限約束Gitlab專業版本提供了codeowners的功能,鑒于此功能的實現擴展了gitlab的功能:持錄件Owner權限配置,在CR階段會有件錄權限卡點件owner權限卡點件owner配置權限管理-流程約束 pre-commit和pre-push兩個鉤函數會對件Owner權限做校驗 pre-commit的校驗必需的 pre-push的校驗是必需的研發流程-存在的問題 每個迭代都有上百個開發分,如何讓新建的分不沖突 每個業務域的迭代節奏不致,是倉維度還是應維度的部署發布 研發員技術能參差不,如何減
6、少上成本和保證研發體驗 快速的迭代過程中,如何保證不同應的代碼CR之間互不影響研發流程-解決案分命名規范統的構建腳本輔助的命令具CLI嚴謹的MR/CR流程研發流程-分命名規范 Dev分命名規范:feature-應標識-版本號-定義 測試分命名規范:test-應標識-版本號 發布分命名規范:release-應標識-版本號 熱修復分命名規范:hotfix-應標識-版本號應標識是唯的研發流程-輔助的命令具安裝應的依賴安裝三的依賴installaddupdatestartbuildremove命令具dx簡化流程、減少理解成本、提升研發效率dx install-sdx install vue-Spnpm
7、 install-filter monorepo-app/frontend-monorepopnpm install-filter monorepo-app/kefu-monitor-migrate.pnpm install vue-w-Spnpm install vue-S研發流程-統的構建腳本turbo.jsonpackage.jsondx build-e env應workspace依賴構建turbo build依賴解析/lint檢測定義 buildmax build/vite build構建 build研發流程-統的構建腳本 統構建參數:sh cloud-build.sh-d custo
8、mer/kefu-xxx-kbench-e t1按應維度的發布,各業務應發布互不影響 統解壓路徑:./apps/customer/kefu-xxx-kbench/dist研發流程-嚴謹的MR/CR流程在CR階段通過件owner確認,避免錯改其他業務域代碼帶來的險研發流程-單元測試 組件源碼依賴之后,如何確保組件的發布質量 研發迭代開發需求已經很忙了,還有時間寫單元測試嗎 研發發布流程中,如何集成動化單測卡點研發流程-單元測試覆蓋率和分覆蓋率組件發布檢測組件單元測試組件/組件檔構建組件同步物料市場上傳組件檔中組件發布消息同步publishpre-publishpost-publish組件發布流程
9、研發流程-單元測試AIGC輔助成在給 AI 的代碼盡可能全的情況下不讓關代碼對 AI 產負影響避免含有 AK/SK 等關鍵信息的代碼外發通過示例告訴GPT應該如何對些常復雜的代碼邏輯編寫單測 對運環境、依賴版本等添加提示詞,約束 AI 產的結果將分析后的代碼、prompt 等組合與當前項結構、代碼進融合代碼AST分析數據安全險校驗向量化及加載模板添加規則調AI接格式化返回結果與現有單測代碼合并研發流程-單元測試流程卡點Gitlab webhook Push eventCICD構建檢測流線任務卡點配置研發流程-主研發流程頻繁集成、持續集成減少分管理的復雜性master作為發布分releasema
10、sterreleasemaster轉變研發流程-主研發臨的問題 對研發的平要求較,如何讓所有研發適應流程 頻繁集成、持續集成給服務帶來的壓如何緩解 前后端的發布節奏不致,如何做好雙端之間的協同 集成到master代碼不定會在當前的release分發布研發流程-主研發流程集成到master代碼不定會在當前的release分發布功能開關:能夠動態的控制線上功能是否即時效前端配置平臺Ifelse單元測試研發流程-主研發流程遷移:平滑式的迭代與遷移并存平滑式的迭代與遷移-現狀 迭代和遷移同時進的時候,如何做到快速遷移 應遷移之后,如何確保應的功能在產環境不出問題平滑式的迭代與遷移-檔與具提效平臺配置修
11、改:遷移檔+修改應配置修改:命令具dx平滑式的迭代與遷移-灰度環境驗證研發測-功能灰度-同步測試-發布上線收益:倉帶來的成效倉帶來的成效接成果 業務應70+總代碼數200萬+總的commit數1萬+物理空間占200M左右接效益 統了lint規范,減少上成本 統了研發流程,提升協作效率 更好的代碼復,提升編碼效率遇到的難點與挑戰 幽靈依賴的問題 全局lock還是局部lock 動回合master給服務帶來的壓 CR過程中如何避免本次變更帶來的擾 組件中peerDependencies依賴帶來的多實例問題 Git元數據不斷增加帶來的git命令執效率問題內容回顧背景:得物前端平臺的架構現狀以及前期的技術調研基:倉的分模型以及代碼按需拉取的實現架構:倉的權限管理、研發流程、單元測試和主研發的設計遷移:平滑遷移的流程與線上質量的保證收益:前遷移的倉數據現狀以及帶來的收益關于我們稀掘:https:/ 謝