程式碼混亂?bug 不斷?這個研發效能工具矩陣或許對你有用
前言
小米研發效能工具矩陣(下稱工具矩陣)是小米雲平臺通用架構與工具團隊根據行業趨勢和公司網際網路業務發展現狀提供的一系列 CICD 工具的集合。作為整個研發效能技術底層支撐,工具矩陣通過服務 2000 + 工程師、1000 + 專案,為手機、MIUI、TV 和人工智慧與雲平臺等多個部門的軟體研發提供了質量改進、法律審計、效率提升方面的幫助。
為什麼會在人力和資源緊缺的情況下依然義無反顧堅持在研發效能領域進行投入?
首先,從軟體開發的趨勢上來講,現今的軟體產品交付已然涉及一套完整的供應鏈。大型客戶端軟體如此,服務化、微服務化趨勢下服務端專案亦如此。基於分解與還原理論的技術分工的確能在一定程度上解決原始方式的一些問題,但是由此帶來的交付頻率和成本變高等問題也越來越嚴重。尤其對大公司來講,一個軟體專案涉及的內外依賴方、上下游團隊關係錯綜複雜,實現一次完整的健康的軟體交付過程成本越來越高。
其次,從行業角度,國內各同行在研發效能領域也一直投資不斷。遠如華為、阿里等公有云服務提供商,均投入整建制的研發資源深耕研發效能領域(華為軟體研發雲參與工程師在 100 人以上)。近如百度,將內部使用的研發效能相關平臺打包為『百度效率雲』平臺對外開放使用。同時,諸如頭條、美團等公司,也在其他城市新開設的研發中心招募研發效能方向的技術人才。
最後,從公司角度,隨著公司規模不斷增長,人員和組織擴充套件之後帶來諸多問題。比如 10 人團隊推行某套標準吼一嗓子抓一兩週可能就達標了,但是 50 人團隊吼了很多次還是有人鑽空子不遵守標準和規範;測試環境原本每天部署頻率不高,團隊共用一套測試環境不會出現問題,但是業務規模多了之後多個 feature 並行開發,A 同事剛部署完測試程式碼還沒結束測試,B 同事部署了新的 feature 程式碼;再比如,某些審計場景下,無論業務主管、審計、法律還是基礎資料部門,沒有哪個團隊能夠給出符合某個特徵的待審計的專案的完整名單,導致各項審計工作即便投入大量精力依然有一定概率出現漏網之魚。
現有工具
基於上述諸多背景考量,我們在綜合權衡成本、效率和效果三個維度的基礎上,通過開源 + 採購 + 自研三種方式,構建瞭如下所述的研發效能工具矩陣。
1. 持續整合引擎 Jenkins
介紹:
Jenkins 是一個開源的持續整合工具,用於監控和排程重複的任務,該工具使軟體的持續整合成為可能。在做了充分調研和溝通後,我們選擇 Jenkins 作為持續整合的引擎。
做的工作:
-
平臺搭建:為了提高 Jenkins 叢集的資源利用率,我們基於 K8s 叢集搭建了多套可伸縮的 Jenkins 叢集。
-
運營接入:目前公用叢集已經接入 530 個 Job,涵蓋雲平臺、AI、小愛、手機 BSP 等多個公司重要業務或服務。
-
接入:如有接入需求,可聯絡劉欣([email protected])、王福([email protected])
2. 程式碼掃描審計平臺
介紹:
程式碼掃描平臺,主要包含 Sonar、Coverity兩個平臺。
平臺名稱 | 功能介紹 | 使用情況 |
Sonar | 主要提供單測覆蓋率、Code Smell、程式碼 bug、重複度等關鍵指標的展示。資料粒度能細化到檔案行級別 | 目前已經接入 242 個專案 |
Coverity | 能夠提供程式碼缺陷檢查、安全漏洞檢查等深層次程式碼問題檢查功能。相對 Sonar 能檢查出更深層次的潛在技術問題和安全風險。 | 已接入 101 個專案,其中包含手機部、TV 等多個重點核心專案 |
3. 二進位制儲存與掃描平臺
介紹:
二進位制儲存與掃描平臺,主要包含 Docker Registry 、Artifactory、Xray 三個平臺,主要提供各種二進位制檔案的儲存、掃描等功能。
平臺名稱 | 功能介紹 | 使用情況 |
Docker Registry | Docker 映象儲存倉庫, 功能包括使用者身份驗證、UI console 介面以及 Artifactory 平臺打通等, 後續將逐步推廣至全公司統一使用 | 目前有 542 個使用者在使用 |
Artifactory | 語言無關的統一的二進位制倉庫管理平臺, 能給儲存的映象等二進位制包打標籤 | 目前已接入 612 個倉庫, 約有 900 名使用者在使用 |
Xray | 提供二進位制檔案的安全掃描能力 | 推動使用中 |
技術規劃
結合業界其他公司的實踐和現有業務現狀,我們將研發效能領域的技術架構分為三層,從下到上分別是工具層、平臺層、資料層。
如圖所示,
工具層,即為本文前述的各項平臺的總和。主要通過基於開源專案搭建、採購或自研的方式提供服務,供不同技術型別的團隊選擇使用。
平臺層,為正在開發中的功能。主要包括專案登記註冊管理、一站式工作流平臺(Pipeline)等功能。
-
專案登記註冊管理:主要是為了解決目前公司內多套程式碼倉庫等背景下,無法無遺漏的完整覆蓋某些特定需要審計的專案型別的問題。
-
一站式工作流平臺(Pipeline): 主要是為了解決使用者在使用上述獨立平臺時操作和配置過於繁瑣的問題。期望通過在平臺上一次簡單的配置就能立刻獲取平臺提供的絕大部分共用的基本能力。
資料層,是鑑於在上述兩層的基礎之上,依然存在諸如平臺數據單點等問題。因此,我們正在逐步整理上述兩層產生的各項資料,逐步構建資料倉庫。然後在資料倉庫基礎之上,提供工程質量報告、異常資料監控等能力,以滿足工程質量改善和審計風控等需求。
未來計劃
目前,在工具矩陣層面,我們也正在努力推動 GitLab 版本升級和 DockerRegistry 統一整合,以期為大家提供更優質的程式碼和二進位制儲存服務;我們也在加緊推進一些安全掃描、法律審計掃描平臺的搭建和推廣工作,以協助相關部門降低因安全或法律問題導致業務損失的風險。
同時,我們正在全力推進一站式工作流平臺(Pipeline)的開發,一期將於 3 季度上線,將主要提供打通基於容器部署測試環境、一鍵接入程式碼檢測工作流等功能,以求更快捷更高效的賦能業務工程質量改進和研發效率提升。