【如下爲分享實錄,有刪節】 今天分享的題目是《企業CICD規模化落地》,所以咱們不會側重講解CICD是什麼以及怎樣作CICD,而是你已經知道怎樣「玩轉」CICD了,要如何在一個比較大的企業中規模化地落地。 研發流程與持續交付簡析 持續交付是隨着互聯網的迅猛發展逐漸普及的一種研發模式,它具備「快速反饋」「質量內建」「自動化」「開發自運維」等特色。html
這種研發模式主要包含如上圖所示的四個環節,「分支管理」「測試驗證」「製品管理」和「發佈」。在業界有不少工具支持這些操做,在雲效產品矩陣中也有對應的產品提供相應功能。 在一箇中小型的研發團隊(好比5-10人),不管你是使用商業軟件仍是開源的工具,通過一段時間的學習,你均可以把「持續交付」作起來。可是當須要規模化落地以後,就有更多的問題須要考慮,如:web
持續交付在阿里巴巴的規模化 接下來簡單瞭解一下「持續交付」研發工具在阿里巴巴內部的演化歷程。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)