企業CICD規模化落地淺析

本次分享的題目是《企業CICD規模化落地》,因此我們不會側重講解CICD是什麼以及怎樣做CICD,而是你已經知道怎樣「玩轉」CICD了,要如何在一個比較大的企業中規模化地落地。

本文整理自阿里巴巴技術專家崔力強(懷虎)的分享《企業CICD規模化落地》。

研發流程與持續交付簡析

持續交付是隨着互聯網的迅猛發展逐漸普及的一種研發模式,它具有「快速反饋」「質量內建」「自動化」「開發自運維」等特點。

01.PNG

這種研發模式主要包含如上圖所示的四個環節,「分支管理」「測試驗證」「製品管理」和「發佈」。在業界有很多工具支持這些操作,在雲效產品矩陣中也有對應的產品提供相應功能。

在一個中小型的研發團隊(比如5-10人),無論你是使用商業軟件還是開源的工具,經過一段時間的學習,你都可以把「持續交付」做起來。但是當需要規模化落地之後,就有更多的問題需要考慮,如:

  • 如何提高協作效率;
  • 新團隊如何快速接入;
  • 如何進行全局風險的控制;
  • 研發流程如何全局更新。

持續交付在阿里巴巴的規模化

接下來簡單了解一下「持續交付」研發工具在阿里巴巴內部的演化歷程。2009年,我們開發了自動化發佈工具;2013年,建立統一構建部署平台;到了2016年我們已經有了持續交付平台,內部稱為「Aone」,該產品包含了從代碼開發、構建、發佈等功能,以一個一站式的研發平台,這個產品到現在也一直在演進;2017年時,我們將「Aone」的核心功能開放出來,供廣大開發者使用,就是我們的「阿里雲·雲效」。目前該產品在公測中,大家可以登錄阿里雲官網進行訪問、使用。

下面我們介紹幾個幫助阿里巴巴實現持續交付規模化落地的研發實踐。

02.PNG

要使持續交付規模化落地,很重要的一點是需要有一套工具對研發模式進行全自動支持。 「研發模式」是指你做事情的一種方式,在這裡主要是指代碼發佈模式以及對應的分支使用方式,比如「主幹模式」,這也是持續交付比較提倡的一種研發模式。但是「主幹模式」對研發人員的要求比較高,並且也不能很好的體現出當前要進行發佈的內容。作為一位研發負責人,你可能會選擇更靈活一些的研發模式,比如 「Aone Flow」或者 「Git Flow」等,這兩種模式都需要一定的自動化工具進行支持。

其中Aone Flow是在阿里巴巴內部主流的一種發佈模式及分支管理方式,我們這裡簡單介紹一下,感興趣的同學可以在網上搜索相關文章了解。Aone Flow使用三種分支類型:主幹分支、特性分支、發佈分支。主幹分支上的代碼跟線上版本的代碼是一致的,當你要開發一個新的功能時,就會拉取一個特性分支作為開發分支,然後在這個分支上提交代碼修改。當你需要發佈的時候,需要先將不同的特性分支合併為開發分支再進行發佈。發佈到線上正式環境後,合併相應的發佈分支到主幹,在主幹添加標籤,同時刪除該發佈分支關聯的特性分支。這個過程中涉及到大量的「拉分支」「合分支」「打標籤」「回滾版本」等等複雜操作,這就需要有一系列自動化工具進行支持。在阿里巴巴內部我們是通過Aone平台(即雲效的內部版本)提供自動化支持的。

03.PNG

第二個實踐是以應用為核心的一站式研發體驗。「應用」是指一個服務或者微服務,可以直接對應一個代碼庫。以應用為中心,我們又可以串聯流水線、環境管理、構建配置、部署等工具鏈。可以讓開發人員很好的理解和打通整個研發流程,同時也可以幫助一個新團隊快速上手。

04.PNG

上圖是我們內部一個產品研發過程的截圖,會有一個研發嚮導幫助你提交各種信息、初始化代碼庫、源碼自動生成、申請測試環境、進行線上發佈等一系列操作。這種「以應用為核心的一站式體驗」非常爽,可以幫助研發團隊節省很多耗費在協作上的時間,而且有了這套流程之後,只要按照嚮導的提示去做就好了,很少出錯。

接下來,我們聊一下如何進行全局風險管控

05.PNG

在部署正式環境之前,會有一個Checklist,進行安全審核、PE審核等等,我們很多對外發佈的應用都會經過這樣的安全審核。在前DevOps時代(2016年以前),阿里巴巴內部還是有專門的運維團隊的,我們叫PE團隊。在正式發佈前,他們會去審核發佈的時間點、配置參數等。這就是全局風險管控,這些卡點會強制在一個流程中實施,不能夠取消。(當然現在已經阿里巴巴內部已經取消了PE團隊,這些卡點會通過自動化工具實現)

兼具靈活性與規範性的持續交付平台

通過以上幾個措施,就能夠在阿里巴巴內部規模化的落地CICD,當新的研發團隊加入時,也不用花費太多的時間去理解這個事情,而是很快上手去操作。但是我們這一套流程也遇到一些問題,這套流程面向Web端服務是可以很好去應對的,比如我們只有一個版本的「天貓」「淘寶」,永遠是面向最新版去交付的;但是隨着阿里雲業務的發展,特別是出現了混合雲的業務,出現了面向多Region和多版本交付的情況,我們這套研發流程就有點捉襟見肘了;因為我們的研發理念是「以應用為中心」,當遇到一些跟應用無關的交付場景時這套研發流程也會顯得不合時宜。

06.PNG

如何提高阿里巴巴持續交付平台的靈活性呢?我們最早的研發架構如上圖左側所示,底層是研發平台,上面我們做了很多「場景化」的研發組件,同時保留了一定的擴展性,比如「自定義組件」,用戶可以把自己的組件接入到我們的流水線里來;也暴露了一部分API,主要只讀接口,其他團隊可以在這上面做一些他的場景化。

我們認為這種研發架構的靈活性和擴展能力是不足的,(如上圖右側所示)後來我們就把構建、編排、部署、製品這些能力單獨拎出來,並開放對應的API,上層我們再去編纂「場景化」,而且有可能這些「場景」都不是我們開發的,而是使用這個產品的用戶自己去開發,重點是我們需要將這種擴展能力暴露出來。我們還會有「自定義步驟」和「自定義組件」,這兩個功能已經在雲效產品中提供。同時,我們還會開發更多API、支持更多的源,也可以通過配置webhook在流水線的生命周期中(失敗、成功、暫停等)通知第三方。

這樣的研發架構就具備了一定的靈活性和可擴展性,但對於企業來講這是不夠,還必須具有開箱即用的能力。

07.PNG

雲效內置代碼掃描、 安全掃描和各種自動化測試能力,並通過流水線模板串聯起來 。如上圖右側所示,針對主流的開發語言Java、PHP、Node.js、Go、Python等提供從構建到部署發佈的各種模板,可以幫助你快速開始。

模板化能力其實是推進CICD規模化落地的關鍵,雲效不僅提供了數十種通用的模版來幫助你快速創建流水線,同時提供定製化能力,支持定製企業自有模版來管理企業持續集成和持續交付流程,將複雜的流程通過可視化編排和結果展現,保障交付可見可控可度量。

總結:

當你已經對CICD有一定了解,怎麼樣更好的在組織內規模化落地呢?第一,你需要選擇一款兼具靈活性和規範性的工具平台。第二,制定適合自己企業的研發模式,並將其固化下來;第三,研發模式的變更可以應用到已有的團隊;第四,通過適當的卡點來控制全局風險。

以上內容整理自懷虎的視頻分享《企業CICD規模化落地》,歡迎大家加入雲效開發者交流群(釘釘群號:34532418)觀看視頻回放,下載演講PPT。


【關於雲效】

​ ​雲效,雲原生時代一站式BizDevOps平台​​,支持公共雲、專有雲和混合雲多種部署形態,通過雲原生新技術和研發新模式,助力創新創業和數字化轉型企業快速實現研發敏捷和組織敏捷,打造「雙敏」組織,實現 10 倍效能提升。

​ ​立即體驗​​