
【以下為分享實錄,有删節】
今天分享的題目是《企業CICD規模化落地》,是以我們不會側重講解CICD是什麼以及怎樣做CICD,而是你已經知道怎樣“玩轉”CICD了,要如何在一個比較大的企業中規模化地落地。
研發流程與持續傳遞簡析
持續傳遞是随着網際網路的迅猛發展逐漸普及的一種研發模式,它具有“快速回報”“品質内建”“自動化”“開發自運維”等特點。
這種研發模式主要包含如上圖所示的四個環節,“分支管理”“測試驗證”“制品管理”和“釋出”。在業界有很多工具支援這些操作,在雲效産品矩陣中也有對應的産品提供相應功能。
在一個中小型的研發團隊(比如5-10人),無論你是使用商業軟體還是開源的工具,經過一段時間的學習,你都可以把“持續傳遞”做起來。但是當需要規模化落地之後,就有更多的問題需要考慮,如:
- 如何提高協作效率;
- 新團隊如何快速接入;
- 如何進行全局風險的控制;
- 研發流程如何全局更新。
持續傳遞在阿裡巴巴的規模化
接下來簡單了解一下“持續傳遞”研發工具在阿裡巴巴内部的演化曆程。2009年,我們開發了自動化釋出工具;2013年,建立統一建構部署平台;到了2016年我們已經有了持續傳遞平台,内部稱為“Aone”,該産品包含了從代碼開發、建構、釋出等功能,以一個一站式的研發平台,這個産品到現在也一直在演進;2017年時,我們将“Aone”的核心功能開放出來,供廣大開發者使用,就是我們的“阿裡雲·雲效”。目前該産品在公測中,大家可以登入阿裡雲官網進行通路、使用。
下面我們介紹幾個幫助阿裡巴巴實作持續傳遞規模化落地的研發實踐。
要使持續傳遞規模化落地,很重要的一點是需要有一套工具對研發模式進行全自動支援。 “研發模式”是指你做事情的一種方式,在這裡主要是指代碼釋出模式以及對應的分支使用方式,比如“主幹模式”,這也是持續傳遞比較提倡的一種研發模式。但是“主幹模式”對研發人員的要求比較高,并且也不能很好的展現出目前要進行釋出的内容。作為一位研發負責人,你可能會選擇更靈活一些的研發模式,比如 “Aone Flow”或者 “Git Flow”等,這兩種模式都需要一定的自動化工具進行支援。
其中Aone Flow是在阿裡巴巴内部主流的一種釋出模式及分支管理方式,我們這裡簡單介紹一下,感興趣的同學可以在網上搜尋相關文章了解。Aone Flow使用三種分支類型:主幹分支、特性分支、釋出分支。主幹分支上的代碼跟線上版本的代碼是一緻的,當你要開發一個新的功能時,就會拉取一個特性分支作為開發分支,然後在這個分支上送出代碼修改。當你需要釋出的時候,需要先将不同的特性分支合并為開發分支再進行釋出。釋出到線上正式環境後,合并相應的釋出分支到主幹,在主幹添加标簽,同時删除該釋出分支關聯的特性分支。這個過程中涉及到大量的“拉分支”“合分支”“打标簽”“復原版本”等等複雜操作,這就需要有一系列自動化工具進行支援。在阿裡巴巴内部我們是通過Aone平台(即雲效的内部版本)提供自動化支援的。
第二個實踐是以應用為核心的一站式研發體驗。“應用”是指一個服務或者微服務,可以直接對應一個代碼庫。以應用為中心,我們又可以串聯流水線、環境管理、建構配置、部署等工具鍊。可以讓開發人員很好的了解和打通整個研發流程,同時也可以幫助一個新團隊快速上手。
上圖是我們内部一個産品研發過程的截圖,會有一個研發向導幫助你送出各種資訊、初始化代碼庫、源碼自動生成、申請測試環境、進行線上釋出等一系列操作。這種“以應用為核心的一站式體驗”非常爽,可以幫助研發團隊節省很多耗費在協作上的時間,而且有了這套流程之後,隻要按照向導的提示去做就好了,很少出錯。
接下來,我們聊一下如何進行全局風險管控。
在部署正式環境之前,會有一個Checklist,進行安全稽核、PE稽核等等,我們很多對外釋出的應用都會經過這樣的安全稽核。在前DevOps時代(2016年以前),阿裡巴巴内部還是有專門的運維團隊的,我們叫PE團隊。在正式釋出前,他們會去稽核釋出的時間點、配置參數等。這就是全局風險管控,這些卡點會強制在一個流程中實施,不能夠取消。(當然現在已經阿裡巴巴内部已經取消了PE團隊,這些卡點會通過自動化工具實作)
**兼具靈活性與規範性的持續傳遞平台
**
通過以上幾個措施,就能夠在阿裡巴巴内部規模化的落地CICD,當新的研發團隊加入時,也不用花費太多的時間去了解這個事情,而是很快上手去操作。但是我們這一套流程也遇到一些問題,這套流程面向Web端服務是可以很好去應對的,比如我們隻有一個版本的“天貓”“淘寶”,永遠是面向最新版去傳遞的;但是随着阿裡雲業務的發展,特别是出現了混合雲的業務,出現了面向多Region和多版本傳遞的情況,我們這套研發流程就有點捉襟見肘了;因為我們的研發理念是“以應用為中心”,當遇到一些跟應用無關的傳遞場景時這套研發流程也會顯得不合時宜。
如何提高阿裡巴巴持續傳遞平台的靈活性呢?我們最早的研發架構如上圖左側所示,底層是研發平台,上面我們做了很多“場景化”的研發元件,同時保留了一定的擴充性,比如“自定義元件”,使用者可以把自己的元件接入到我們的流水線裡來;也暴露了一部分API,主要隻讀接口,其他團隊可以在這上面做一些他的場景化。
我們認為這種研發架構的靈活性和擴充能力是不足的,(如上圖右側所示)後來我們就把建構、編排、部署、制品這些能力單獨拎出來,并開放對應的API,上層我們再去編纂“場景化”,而且有可能這些“場景”都不是我們開發的,而是使用這個産品的使用者自己去開發,重點是我們需要将這種擴充能力暴露出來。我們還會有“自定義步驟”和“自定義元件”,這兩個功能已經在雲效産品中提供。同時,我們還會開發更多API、支援更多的源,也可以通過配置webhook在流水線的生命周期中(失敗、成功、暫停等)通知第三方。
這樣的研發架構就具備了一定的靈活性和可擴充性,但對于企業來講這是不夠,還必須具有開箱即用的能力。
雲效内置代碼掃描、 安全掃描和各種自動化測試能力,并通過流水線模闆串聯起來 。如上圖右側所示,針對主流的開發語言Java、PHP、Node.js、Go、Python等提供從建構到部署釋出的各種模闆,可以幫助你快速開始。
模闆化能力其實是推進CICD規模化落地的關鍵,雲效不僅提供了數十種通用的模版來幫助你快速建立流水線,同時提供定制化能力,支援定制企業自有模版來管理企業持續內建和持續傳遞流程,将複雜的流程通過可視化編排和結果展現,保障傳遞可見可控可度量。
總結:
當你已經對CICD有一定了解,怎麼樣更好的在組織内規模化落地呢?第一,你需要選擇一款兼具靈活性和規範性的工具平台。第二,制定适合自己企業的研發模式,并将其固化下來;第三,研發模式的變更可以應用到已有的團隊;第四,通過适當的卡點來控制全局風險。
以上内容整理自懷虎的視訊分享《企業CICD規模化落地》,歡迎大家加入雲效開發者交流群(釘釘群号:34532418)觀看視訊回放,下載下傳演講PPT。
【關于雲效】
雲效,企業級一站式DevOps平台,源于阿裡巴巴先進的研發理念和工程實踐,緻力于成為數字企業的研發效能引擎!雲效提供從“需求 ->開發->測試->釋出->運維->營運”端到端的線上協同服務和研發工具,通過人工智能、雲原生技術的應用助力開發者提升研發效能,持續傳遞有效價值。
【雲效官網】
https://www.aliyun.com/product/yunxiao【公測指南】
https://developer.aliyun.com/article/756207【申請公測】
https://devops.aliyun.com【學習路徑】
https://help.aliyun.com/document_detail/153739.html【開發者社群】
https://developer.aliyun.com/group/yunxiao【精彩活動】雲效公測開啟 「産品體驗官」招募中~
https://www.aliyun.com/activity/yunxiao/Beta2020歡迎掃碼加入雲效開發者俱樂部(釘群:34532418)