知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
您當前位置>首頁 » 新聞資訊 » 小程序相關(guān) >
30+條業(yè)務(wù)線,攜程微信小程序如何協(xié)同開發(fā)
發(fā)表時間:2022-7-26
發(fā)布人:葵宇科技
瀏覽次數(shù):49
一、背景
目前,攜程小程序共有30+條業(yè)務(wù)線并行,上百個開發(fā)人員參與,常規(guī)發(fā)布兩周一次,這么大體量的小程序以及這么快的業(yè)務(wù)迭代速度,對我們的技術(shù)提出了更高的要求。
在攜程小程序的開發(fā)過程中,如何準確快速地把小程序交付給測試人員是一個繁瑣的過程。按照以往的做法,開發(fā)人員將代碼提交至發(fā)布分支后,還需要自行到公司的MCD(攜程內(nèi)部發(fā)布平臺)進行發(fā)布,并且存在十幾個業(yè)務(wù)線同時進行,排隊打包的情況,打包完成后還要依賴PMO的發(fā)布才能獲得體驗碼進行測試。而理想的模式是,開發(fā)人員只需要進行代碼的提交即可,無需關(guān)心項目編譯、打包、發(fā)布等流程。
跨團隊協(xié)作,如何減少耦合,避免互相影響;數(shù)十個業(yè)務(wù)線共同維護一個小程序,而小程序必須作為整體發(fā)布,如何協(xié)調(diào)發(fā)布過程,讓其有條不紊的進行將是我們討論的重點。本文將從倉庫管理、持續(xù)集成、持續(xù)交付幾個方面進行詳細介紹。
二、協(xié)同流程
攜程小程序以模塊化的思想,根據(jù)業(yè)務(wù)線對代碼進行拆分隔離,采用多 BU (業(yè)務(wù)單元)的合作模式。為了避免多人協(xié)作時的版本切換和上線測試隔離等問題,我們把一個完整的項目按照業(yè)務(wù)類別劃分為多個業(yè)務(wù)倉庫,如基礎(chǔ)業(yè)務(wù)、酒店業(yè)務(wù)、機票業(yè)務(wù)、火車票業(yè)務(wù)等,相互之間不存在依賴關(guān)系;通過發(fā)布倉庫將業(yè)務(wù)倉庫的代碼進行合并、打包、上傳,該倉庫中的代碼為預發(fā)布版本,如圖1所示:
2.1 倉庫管理
每個業(yè)務(wù)模塊都是一個獨立的Git倉庫(即Bundle),互不影響,要想實現(xiàn)協(xié)同,所有的業(yè)務(wù)倉庫必須要有統(tǒng)一的規(guī)范,倉庫的規(guī)范有以下幾點:
- 命名規(guī)范:weixin-pages-業(yè)務(wù)名稱;
- 分支規(guī)范:master作為發(fā)布分支;
- 文件規(guī)范:只包含具體的業(yè)務(wù)代碼及app.json文件;
- 代碼提交規(guī)范:合并到發(fā)布分支上的代碼,要提交MR。
值得注意的是,在實現(xiàn)模塊化的過程中,業(yè)務(wù)模塊已經(jīng)隔離,每個業(yè)務(wù)倉庫都不能獨立運行。為了協(xié)調(diào)各個倉庫的路由配置,我們規(guī)定在每個模塊的根目錄下,添加各自的 app.json 配置,用于配置業(yè)務(wù)模塊的路由,然后在工具打包時,將各模塊的路由進行合并 Merge,對應(yīng)關(guān)系如下圖:
而在開發(fā)階段需要用到我們提供的腳手架工具miniTools來完成項目的初始化、代碼更新、遠端Bundle打包等操作,常用命令如下所示:
執(zhí)行簡單的命令minitTools —init即可拉取各個業(yè)務(wù)倉庫中的代碼,并將其合并成一個完整的小程序在微信IDE中進行開發(fā)。
除了倉庫規(guī)范,還需要對每個業(yè)務(wù)倉庫的webhooks進行配置,用于跨倉庫提交代碼的同時觸發(fā)發(fā)布倉庫(weixin-auto.git)的pipeline。
2.2 持續(xù)集成
為了降低開發(fā)成本,減少人工操作,基于微信小程序官方提供的miniprogram-ci工具,我們構(gòu)建了一套自動化上傳測試流程。通過在業(yè)務(wù)倉庫配置webhooks,當業(yè)務(wù)倉庫的發(fā)布分支(master)發(fā)生push事件時將觸發(fā)發(fā)布倉庫(weixin-auto.git)的pipeline,執(zhí)行我們在 .gitlab-ci.yml文件中的設(shè)置的腳本,主要內(nèi)容如下:
從上圖可以看出,我們主要依賴git提供的git submodule命令以及腳手架工具miniTools。通過git submodule update --remote將第三方庫(各個業(yè)務(wù)倉庫)中最新提交到指定分支的代碼合并到當前倉庫(發(fā)布倉庫)的指定位置中。然后,通過腳手架工具miniTools執(zhí)行預定義的腳本文件,具體流程如下:
1)獲取服務(wù)端配置信息,主要包括releaseCommitHash、Size、RC(Release Candidate)數(shù)據(jù):
- releaseCommitHash:用于版本控制,表示業(yè)務(wù)倉庫在生產(chǎn)上使用的版本(commitHash);
- Size:用于Size控制,對各個業(yè)務(wù)線設(shè)置了可用的最大Size值;
- RC:用于控制該業(yè)務(wù)倉庫的代碼是否會自動合并至發(fā)布倉庫中。
2)通過releaseCommitHash拉取各個業(yè)務(wù)倉庫最新的代碼并進行合并,組成完整的小程序代碼;
3)通過ESLint進行代碼合法性檢查,最大程度地避免基本語法錯誤;
4)通過微信官方提供的miniprogram-ci工具,進行自動化編譯,刪除無用代碼減小體積;
5)Size檢查:通過微信官方提供的miniprogram-ci的preview方法獲取所有分包的大小以及測試二維碼,通過計算查看當前業(yè)務(wù)倉庫的代碼提交是否會導致在Size超限,超限將導致發(fā)布失??;
6)RC發(fā)布權(quán)限檢查:服務(wù)端返回當前業(yè)務(wù)倉庫的RC值(true/false)決定了我們是否要將其最新的代碼合并至發(fā)布倉庫的master分支,并且是否將最新的代碼壓縮成zip包,上傳至發(fā)布倉庫的release分支作為預發(fā)布版本。最終發(fā)布倉庫(weixin-auto.git)master、release分支的目錄結(jié)構(gòu)如下圖所示:
7)數(shù)據(jù)更新:如果RC為true并且代碼成功上傳之后,我們將同步更新該業(yè)務(wù)倉庫的releaseCommitHash、分包Size等信息至服務(wù)端中,以便別的業(yè)務(wù)倉庫可以拉到該倉庫最新的代碼;
8)構(gòu)建結(jié)果通知:無論成功與否,構(gòu)建的結(jié)果都將發(fā)送至相關(guān)的群組以及觸發(fā)該pipeline的人員,如果失敗,將返回詳細的錯誤信息進行排障,成功將返回測試二維碼,如下圖所示:

圖2-5 構(gòu)建結(jié)果通知
上述步驟任何一步失敗都將導致pipeline失敗,通過上述流程,確保提交到發(fā)布倉庫的代碼均為正確無誤的代碼。
2.3 持續(xù)交付
目前,攜程微信小程序的發(fā)布已經(jīng)統(tǒng)一接入公司的MCD發(fā)布平臺,將事先寫好的python腳本在MCD平臺上進行配置,臨近發(fā)布節(jié)點,PMO只需到MCD平臺上進行集成發(fā)布。此時MCD將自動運行我們預設(shè)的腳本,該腳本將拉取發(fā)布倉庫release分支上的zip包,將其進行整理,生成體驗版二維碼,由PMO發(fā)給相關(guān)人員進行集成測試。
測試通過后,再有PMO將代碼手動提交至微信后臺進行審核,至此,一次完整的常規(guī)發(fā)布流程已經(jīng)完成。
三、總結(jié)
綜上所述,通過倉庫管理將各個業(yè)務(wù)線分割成獨立的git倉庫,保證業(yè)務(wù)的獨立開發(fā)、互不影響;通過pipeline自動化持續(xù)集成方案并結(jié)合公司的MCD發(fā)布平臺進行持續(xù)交付,大大簡化了一線開發(fā)人員的開發(fā)成本,只需提交代碼即可,打包、測試、上傳、預覽、通知等操作均由發(fā)布倉庫的pipeline自動化完成,避免了人工操作的不穩(wěn)定性與繁瑣,確保了業(yè)務(wù)的敏捷開發(fā)以及協(xié)同合作效率。
本文僅介紹了常規(guī)業(yè)務(wù)線協(xié)同開發(fā)的流程,其實攜程微信小程序早已引入了Taro這一概念,并且針對使用Taro技術(shù)棧的業(yè)務(wù)線設(shè)計了一套獨有的打包方式,目前在微信小程序中運行良好,我們正在穩(wěn)步向其他各類小程序(百度、頭條、支付寶等)中推廣。
團隊招聘信息
我們是平臺研發(fā)中心,一個為攜程快速發(fā)展提供各類基礎(chǔ)產(chǎn)品和服務(wù)的平臺,我們以技術(shù)驅(qū)動提升客戶體驗,提升跨團隊協(xié)作效率。
我們擁有優(yōu)秀而強大的團隊,引導你學習業(yè)內(nèi)領(lǐng)先的開發(fā)技術(shù),與技術(shù)高手交流對話,學習切磋。在億級用戶嚴苛的品質(zhì)要求中,激發(fā)你腦中不斷涌現(xiàn)的創(chuàng)新思維,帶領(lǐng)你體驗飛速成長的驚喜快樂,并在各種機遇與挑戰(zhàn)中發(fā)展自我,成就自身。
目前我們前端、后臺、算法、測試等技術(shù)崗位均有職位。簡歷投遞: [email protected] ,郵件標題:【姓名】-【攜程平臺研發(fā)中心】-【投遞職位】
【作者簡介】
攜程前端框架團隊,為攜程集團各業(yè)務(wù)線在PC、H5、小程序等各階段提供優(yōu)秀的Web解決方案。產(chǎn)品涉及各類前端/Node端應(yīng)用框架、研發(fā)工作臺、前端中臺化、靜態(tài)資源發(fā)布系統(tǒng)等。當前主要專注方向包括:新一代研發(fā)模式探索,Rust構(gòu)建工具鏈路升級、Serverless應(yīng)用框架開發(fā)、在線文檔系統(tǒng)開發(fā)、低代碼平臺搭建、適老化與無障礙探索等。
相關(guān)案例查看更多
相關(guān)閱讀
- 汽車報廢軟件
- 霸屏推廣
- 江蘇小程序開發(fā)
- 報廢車拆解回收管理系統(tǒng)
- 云南小程序開發(fā)制作公司
- 網(wǎng)站建設(shè)
- 跳轉(zhuǎn)小程序
- 搜索排名
- 云南網(wǎng)站建設(shè)價格
- 小程序用戶登錄
- 云南網(wǎng)站建設(shè)哪家公司好
- 怎么做網(wǎng)站
- 報廢車回收
- 百度小程序
- 云南軟件定制公司
- 網(wǎng)站建設(shè)電話
- painter
- 昆明小程序公司
- 云南小程序開發(fā)報價
- 網(wǎng)站建設(shè)列表網(wǎng)
- SEO
- 云南軟件設(shè)計
- 河南小程序制作
- 云南小程序開發(fā)推薦
- 云南網(wǎng)站建設(shè)公司
- python開發(fā)小程序
- 云南網(wǎng)站建設(shè)
- 網(wǎng)站建設(shè)首選
- 迪慶小程序開發(fā)
- 楚雄網(wǎng)站建設(shè)公司