天天看點

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

文/戴蒙

擁有3萬多人的阿裡巴巴,線上有上萬個應用,上億的使用者即時線上,每天有幾百個應用線上上更新,就像在時速200公裡的高速公路上橫穿馬路維修栅欄一樣,時刻保持着心驚膽戰,而保護這個過程的體系就是阿裡巴巴持續傳遞工具與實踐。

現代開發企業中如何做好持續傳遞是一件異常重要的事情,在網際網路企業中更是如此。而阿裡巴巴在這麼多年的研發管理基礎上,對如何做好持續傳遞提出了一套全新的模型與實踐。

阿裡技術保障部産品專家戴蒙在“2016雲栖大會上海峰會”專場《“網際網路+”架構及實踐專場-企業級資訊系統雲化演進之路》中分享了阿裡雲持續傳遞打造高品質傳遞和高品質軟體的經驗。

本次演講深度分析了阿裡式的持續傳遞理論,同時分享如何通過工具提升研發管理實踐效果。互動無小事,任何與客戶有關的都是大事,做好了研發管理才能平安如意,如同登陸在月球虹灣裡那麼高效安穩。

以下為整理後的演講實錄。

為什麼會有持續傳遞的思考?

大家知道雙11當時每秒鐘十幾萬次的交易量,我們這時候去做軟體更新時一定是要做到持續的,不會中間中斷,代碼更新完就馬上要上線的,而不是說任何的操作要隔上幾個月、幾天才能去更新,這肯定是不行的。我們到底怎麼去解決這些問題?我們總結出影響釋出品質的關鍵因素,分為兩大塊:

未發生故障

發生故障

未發生故障的時候,我們應該做code review、測試、灰階、釋出;在發生故障之後,我們先要去應用定位,然後做應用復原,然後做故障定位,定位完成之後是修複。在持續傳遞裡面這幾個關鍵因素都會用到。

持續傳遞是什麼?

持續傳遞包含幾個方面:內建、持續、部署、傳遞。

內建是什麼呢?我們認為在一起就是內建,就是代碼放在一塊,你的邏輯放在一塊就叫內建。隻有不停的內建才是一個持續內建。我們有時候會産生這樣的問題,一個人在部署的時候另外一個人在測試,有可能就會産生沖突,是以部署是保證內建獨立性的關鍵要素。多次的內建産生一次的傳遞。如果前面不做內建的話在做傳遞的時候會不會很擔心?是以隻有在多次內建之後才會去做這次傳遞。

習慣養成

持續傳遞裡面很多内容是我們的一個習慣,怎麼去養成這些習慣呢?就是人在做一些事情的時候,或者是在做集體的運動當中是有心理過程的。1967年美國有一個高中老師做了一個叫做“第三次帝國”的實驗,就是他為了證明集體主義養成習慣是非常快的。第一天,他做的是來上課的時候讓所有的學生起立坐下,他說起立的時候就起立,他說坐下的時候就坐下,一共花了5分鐘。然後讓所有的學生到教室外面,他做了示意之後學生進來之後再坐下,在這個過程中鴉雀無聲。就是說人類的習慣開始可能隻需要5分鐘,養成這個習慣隻有用了3天。怎麼樣去養成一個習慣是非常容易、非常慣性的一個事情,我們通過一個良好的工具、一個良好的計劃是可以養成我們持續傳遞中應該去做的事情。影響釋出品質的關鍵因素就是我們應該要去養成的習慣。

不好的持續傳遞線

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖1最簡單、最縮小的一個持續傳遞的過程

圖1中會看到這樣幾個節點,第一個節點是代碼送出、編譯、單元測試。代碼送出之後并不能在旁邊坐着喝一杯咖啡,其實這個過程是不對的,你的回報量是不夠的,隻有把編譯和單元測試都放在一塊的時候才可以。第二個節點是我們的部署環境和內建測試,部署環境和內建測試為什麼單獨分開是有問題的呢?部署和內建測試應該是在同一個活動中的,部署會影響內建測試。任何一個內建測試環境,在别人會随意點到你這個部署造成你的環境崩潰的情況下,整個測試是不安全的,我們希望活動間不互相影響,是以這兩個環節應該并在一塊。

好的持續傳遞線

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖2好的傳遞線架構圖

如何去養成一個好的傳遞線?其實很簡單,圖2中,在第一個節點我們應該把代碼檢出,和我們的編譯、單元測試放在一塊,第二個節點就是我們的部署和內建測試,第三個節點是部署冒煙環境和冒煙測試,第四個節點是部署生産環境和冒煙測試。

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖3持續傳遞線的資料理論

在好的傳遞線基礎上我們提出了一套理論,我們可以看到整個持續傳遞的過程裡面有幾個點:原子級活動,覆寫面越來越大,代價越來越高,頻度越來越低。最終根據這四個原則我們一直不停的去做持續傳遞的話會出現一個資料,就是持續內建的次數肯定會大于等于持續部署的次數,最終會大于持續傳遞的次數,即圖3中 m大于等于n大于等于1。如果這裡面的資料是趨向于互相都相等的,就是說代碼送出後直接到傳遞了,這個過程一般是不太正常的,很難達到這個過程,中間還是會有一些內建和測試的過程。

持續傳遞工具

在開發企業中會去做包括tdd、靈活開發這些過程的一些事情,做這些事情是為了什麼?肯定是為了提供一個高品質的軟體馬上去傳遞到我的線上或者是傳遞到我的伺服器中,我們中間會應用一些工具。

靈活宣言:個人和互動高于流程和工具;工作軟體高于了解文檔;客戶協作高于合同協商;變化響應高于計劃遵循。

我們既然要做到靈活宣言裡面靈活開發的一些過程,就需要用到持續傳遞的工具,持續傳遞的工具需要包含幾個部分:項目管理、代碼托管、建構管理以及持續釋出,最後形成持續傳遞線。

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖4代碼管理

項目管理需要動态性的文檔。我們在網頁上有一些内容,頁面上會有相應的标簽提示你是什麼樣的内容,我們的任務牆上會産生相應的故事卡,就是靈活開發裡面我們談所謂的故事,我要分解出最終能夠實作的故事,打通它的特性。我們認為所有的人員都應該在一份文檔中去觀察、修改、編輯你的内容。傳統的開發模式裡面我們會分角色,這個事情在靈活開發裡面其實是強烈反對的,我們更多希望他是一個角色的同步,大家應該在能力和角色上是打通的。我們通過這份文檔讓所有人習慣于在一份文檔中更新資訊,造成資訊的統一性,最後在人員的能力上進行一個打通。

溝通

在我們的軟體開發過程中溝通是非常重要的環節。第一是我們的面對面溝通,第二是電話溝通,第三是即時消息,第四是郵件。在我們的持續傳遞裡面我們也都提供這樣的功能,包括現在在市面上有一些做項目協作的軟體或者是平台,大家都是追求怎麼樣提高我們的開發效率,就是提高我們的溝通。

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖5代碼管理系統圖

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖6代碼庫

阿裡巴巴現在提供了一套代碼管理的服務:

集合編譯、測試、釋出等插件;

支援所有git指令,相容所有git工具;

私有git倉庫,存儲任何類型的源代碼及檔案;

線上浏覽和管理代碼,提升研發效率。

這套服務非常高可用,而且是無限存儲。比如說我們的oss、對象存儲、高速帶寬,我們是線上浏覽的,我們可以進行一些線上操作,我們是協作開發的,我們任何的資訊都會及時溝通交流,最後統一入口。

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖7構件管理系統圖

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖8構件管理

阿裡雲構件倉庫實作高速并且穩定的maven鏡像管理服務,每天與其他中央庫同步,提供高速穩定的網絡和服務。可以通過構件服務上傳、下載下傳插件或依賴包,這使得在建構時可以快速下載下傳依賴包,也可以上傳依賴包提供給其他開發者使用。

整個持續傳遞應該是一套完整的系統。我們做到的備份效果是非常好的,會達到1:9的備份,我們還提供一個構件的服務,構件也會達到1:3的備份。而且我們的上傳非常簡單。

建立反脆弱系統

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖9持續傳遞系統

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

圖10持續釋出線模闆

為什麼要做持續傳遞,還有一個非常重要的點——人肯定會産生意外的情況,整個世界都會有意外的情況,我們怎麼在産生意外事件時保護你的代碼和開發?我們就應該用到持續傳遞系統,(上圖)就是我們的持續傳遞系統,我們會非常快速高效的讓軟體放到線上。而且我們現在還提供了幾種服務,我們可以通過ecs的部署,我們還有容器的服務,我們可以部署到容器上,而且我們可以通過阿裡雲的容器非常簡單快速的上傳下載下傳。同時我們還提供了一個審批的服務,現在持續內建的軟體裡面其實沒有這一步。

雲協作從這裡開始

持續傳遞平台(crp,continuous rlease plaftorm)提供軟體生命周期全環節服務,包括項目管理、需求管理、缺陷管理、代碼托管、構件管理、開發環境管理、持續傳遞線、構件管理、依賴管理、測試管理、一鍵部署、監控管理、團隊協作等。讓您的軟體簡單、快捷、安全、高效的傳遞。

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

阿裡雲持續傳遞平台:https://crp.aliyun.com/

​掃碼關注阿裡技術保障公衆号,有更多技術幹貨分享,更有機會赢取精美禮品。

阿裡雲持續傳遞-快速可靠地傳遞高品質軟體

繼續閱讀