天天看點

移動研發 DevOps 落地實踐

作者:姚蘭天(十鏡),螞蟻金服技術專家。

概要:傳統的研發模式已經無法适應企業在數字化轉型中快速疊代以及研發協同的要求,建設符合業務場景特性和有效支撐高并發、持續疊代內建需求的研發效能實踐迫在眉睫。

本文将圍繞支付寶如何随着移動市場的高速發展,逐漸沉澱優化出适用業務發展需求的研發效能實踐。

現場視訊):

http://t.cn/Ai9HuCNT

大家好,我是來自支付寶終端工程技術團隊的十境。本文将帶領大家了解支付寶移動端如何随着移動市場的告訴發展,逐漸沉澱優化出适用業務發展需求的研發效能實踐。

0. 背景

  • 如何解決百萬級代碼的極速建構?
  • 如何讓上百開發者在同一個 App 上高效研發協同?
  • 如何保障代碼頻繁變更下的傳遞品質?

顯然,傳統的研發模式已經無法适應企業在數字化轉型中快速疊代以及研發協同的要求,建設符合業務場景特性和有效支撐高并發、持續疊代內建需求的研發效能實踐迫在眉睫。

1. 研發協作平台現狀

關于支付寶在移動端研發平台建構的曆程,首先我們先展開看看目前平台的現狀,并講述如何參考 DevOps “三步工作法” 來正向模組化我們的傳遞價值流,以及這些活動中比較核心的分支模型,建構,持續內建等。

研發協作平台大概從 2014 年開始建設,如今支援的 iOS 和 Android 用戶端代碼量都已經超過 300w 行,拆分的 Bundle 數量也都在 300 個以上。我們每周的建構次數在 1.4W,安裝包平均每天會灰階 2~3 次,開發測試同學達到近千人的規模。

我們支撐了螞蟻集團支付寶、網商銀行、财富、口碑等産品的傳遞,支援的技術棧從最開始的 Android 和 iOS,演進到廠商 SDK、小程式、IoT 及桌面應用等。在這些能力輸出的下層是我們沉澱的一套研發協作流程,從需求到開發、測試、傳遞、及釋出後的回報閉環。

支付寶業務的飛速發展,從工具到超級 App,代碼量猛增到 300W+。技術架構上,采用了子產品化動态加載的技術,這就給我們提了一個問題,如何将 300+ 個 Bundle,在不同的團隊裡開發,內建,變成一個高品質的 App 推送到使用者手機上。

2. DevOps 三步工作法

DevOps 三步工作法,第一步,我們正向價值流模組化,把研發劃分為 5 個階段(需求階段、開發階段、測試階段、內建階段以及釋出階段),定義每個階段的準入準出标準。比如需求分析的結果需要拆分到 User Story 級别,通過大家需求評審,達成一緻。接着,每個階段我們提煉出最重要的活動,比如開發階段,開發同學每天最多的就是寫代碼,代碼 Review,以及代碼 MR/Push 後觸發的自動化流水線,如編譯、掃描、自動化測試等。這些階段和每個階段的活動以及人員之間的協作,就構成了我們傳遞大圖的脈絡,即我們常說的價值流。

通過正向價值流的模組化,結合團隊的開發實踐,便可以得到研發協作平台産品的一個資訊架構圖。

如上圖所示,随時間演進,我們沉澱出了一套産品資訊圖:從最開始僅僅是安裝包建構的一個線上工具,到産物管理,版本管理,架構拆分後的子產品資訊、子產品建構管理,根據建構的産物及場景的不同,抽象出了建構配置、管道配置、持續內建的配置,當然還有其它中繼資料如證書資訊的配置。

我們參考了靈活、Scrum 實踐,抽象出疊代的概念來組織每個子產品涉及的資源如代碼倉庫、需求、缺陷、任務、持續內建流水線還有最重要的團隊和人員。釋出定義了我們傳遞的産物,同時也是各團隊工作內建到一起的大容器。

這是我們研發協作平台的門戶首頁,開發者能直覺地看到自己關注項目的日常釋出、疊代資訊,以及每天需要解決的待辦等,每個類目和我們上一頁提煉的資訊架構相對應。

  • 拆解「依賴配置」

前面提到我們通過架構拆分,團隊子產品化協作的方式來應對激增的業務需求。那麼之是以有這張截圖,是想讓大家對我們的依賴配置有個直覺的感受,每個子產品的産物可以了解為一個 Zip 包,在某一個安裝包釋出中管理這樣由 300 多個 Bundle 構成的一個依賴清單。我們的需求內建某種意義上就是這個依賴清單中中子產品版本的更新。子產品拆分也讓我們的小批量快速傳遞成為得以踐行、擁有 2 周釋出一個大版本的能力。

  • 分支模型

需求管理我們可以借助 Jira、Redmine 等工具,或對接内部的項目管理平台。這裡我直接從開發階段的活動開始。

首先說下 MR,這是我們的分支模型:“基于分支開發,基于主幹釋出”。開發階段基于 Master 建立疊代分支,基于疊代分支建立 Feature 分支通過 MR 方式在合并到疊代分支前,做一次 Code Review 卡點。內建階段便可以直接基于 Master 分支建立 Bugfix 分支然後在 MR 回 Master 分支。釋出階段基于用戶端版本建立 Tag。

1. 建構的定義與技術架構

接下來說說建構。我把建構定義為代碼和配置經過建構工具和腳本在環境中執行而産生産物的過程。是以我們要關注這 4 個要素“代碼、建構腳本、執行環境、産物管理”。代碼和建構腳本由開發者提供,我們要幫忙管理的是環境和産物。比如 IoT 提個需求過來要支援他們的建構,其實就是給他們準備一個 Docker 鏡像,定義好輸入輸出,把他們産物釋出到 Maven 倉庫或雲存儲中。

  • 建構:技術架構

了解了建構的要素,技術架構也就很明确了,上面是我們支援的建構業務類型,排程是執行的核心能力,Docker 和 MacOS 是我們涉及的環境,借助 Jenkins 來連接配接這些執行機器。環境管理這塊主要是 Docker,Windows 對 Docker 的支援也很好,我們的 IDE 建構就用的 Windows Docker。我們有 30 多台 Mac Pro,為了更好的管理,采用 Ansible 來做一些預置和軟體更新的工作。

  • 建構:Demo

這是我們的一次 Android 安裝包建構,時間是 3 分鐘,通過 Jenkins 的界面可以很直覺的看到經曆了那些步驟及耗費的時間,如果有錯誤也能很快定位到。

2. 自動化流水線架構設計

從建構的單項能力建設,慢慢擴充到了靜态掃描、自動化測試、包大小檢查,安全掃描等驗證的需求。我們首先會想到持續內建流水線,我們調研了 Jenkins、Gitlab、Drone、CircleCI、TravisCI 等主流的 CI 工具,最終還是決定自研一套 CI 平台來連接配接公司内部的各個團隊的驗證服務。從這個架構圖可以看出 CI 的核心是 Pipeline 流水線的定義與解析,驗證執行,以及連接配接各服務的接入規約。上層是支援的業務類型,以及觸發流水線的機制設定。

流水線也讓我們不停的思考如何去更好的可視化,以及 DevOps 實踐“三步工作法”中的逆向回報設定。比如流水線編排時如何快速驗證,分層分級驗證,做到有效回報。根據回報再快速修複。

  • 自動化流水線:清單 Demo

這是我們的持續內建清單頁面,選擇 IOT 新業務快速試錯,将掃描和冒煙測試都展示給開發測試同學,這樣對代碼 Push 後的一個驗證有個全局認識,然後他們便可以更好的局部節點優化,比如冒煙測試要擷取什麼樣的報告。

  • 自動化流水線:示例 Demo

這是一條流水線的詳情頁面,點選每個節點可以看到執行的狀态和産物資訊,依賴資訊等。每個節點也可以選擇跳過執行,或選擇從失敗節點重新運作,滿足業務接入流水線不同階段的使用場景。

3. 釋出:健康度

接下來再介紹一些我們内部灰階釋出的一些品質名額設計。這是我們在內建過後經曆内灰、外灰、釋出的界面,每個階段我們會聚合各種品質和回報資訊,來幫助我們去推進每個階段。

  • 釋出品質分數

這是釋出品質的一個概要資訊,及灰階情況。品質分的曲線能很好的配合我們工作的節奏。雖然剛開始品質分非常難以設計,不容易全面并準确衡量,但品質分一定要有,然後不停地疊代。剛開始可以參考 Sonar 的 Quality Gates 和它的品質次元來設計。

  • 釋出:品質次元

這是我們品質次元的設計,供大家參考一下。

3. 總結

最後簡單總結,以上内容首先介紹了支付寶用戶端研發的現狀,通過 DevOps “三步工作法” 第一步正向模組化工作流,梳理了需求、開發、測試、內建、釋出這 5 個階段及每個階段的重要活動,形成價值流動的脈絡圖,并參考靈活開發實踐來組織我們的産品資訊架構。然後重點講述了我們的建構和持續內建流水線的設計與實作,通過流水線編排、釋出階段品質分的設計來實踐 “三步工作法”的逆向回報機制。 三步工作法。第三步持續學習和改進可以基于前 2 步的來達成。

以上介紹的支付寶移動研發 DevOps 落地實踐,目前已經通過移動開發平台 mPaaS 對外輸出一部分能力。

通過 mPaaS,我們針對移動端産品的研發管理,能夠從産品需求準備,研發,建構,驗證到內建等多個項目階段,充分節約管理成本,提升研發效率。

随着軟體研發的模式由傳統的瀑布式開發逐漸向靈活開發和 DevOps 演進,變得愈來愈自動化和智能化,研發、測試、釋出統一完成線上化和流程化将全面提升研發協同效率,并給企業帶來更多的業務價值、

由于篇幅限制,很多技術要點我們無法一一展開,歡迎大家通過技術文檔或點選“閱讀原文”進一步了解 mPaaS :

https://tech.antfin.com/docs/2/49549

| 活動推薦:MTSC 2019 測試開發大會

MTSC2019 第五屆中國移動網際網路測試開發會将于 6 月 28-29 日在北京國際會議中心舉行,50+ 來自 Google,BAT,TMD 等一線網際網路企業的測試大咖分享精彩議題,涵蓋移動自動化測試、服務端測試、品質保障 QA、高新測試技術(AI+、大資料測試、IoT 測試)等專題。

螞蟻金服多位技術專家将在大會上分享精彩議題,解密螞蟻金服内部移動測試 2.0+ 演進之路、代碼實時染色系統如何完成代碼覆寫率檢測等,期待與你交流。

往期閱讀 《開篇 | 螞蟻金服 mPaaS 服務端核心元件體系概述》 《螞蟻金服 mPaaS 服務端核心元件:億級并發下的移動端到端網絡接入架構解析》 《mPaaS 核心元件:支付寶如何為移動端産品建構輿情分析體系?》 《mPaaS 服務端核心元件:移動分析服務 MAS 架構解析》 《螞蟻金服面對億級并發場景的元件體系設計》 《自動化日志收集及分析在支付寶 App 内的演進》

關注我們公衆号,獲得第一手 mPaaS 技術實踐幹貨

釘釘群:通過釘釘搜尋群号“23124039”

期待你的加入~