做到这4点,才是真正的持续交付| 研发效能提升36计
簡介:全線專欄《研發(fā)效能提升36計_持續(xù)交付篇》上線啦!本專欄將通過10-20篇文章,系統(tǒng)分享云原生時代,企業(yè)如何落地持續(xù)交付。本文是該專欄的第2篇。 什么是真正的持續(xù)交付?
編者按:全線專欄《研發(fā)效能提升36計_持續(xù)交付篇》上線啦!本專欄將通過10-20篇文章,系統(tǒng)分享云原生時代,企業(yè)如何落地持續(xù)交付。本文是該專欄的第2篇。
什么是真正的持續(xù)交付?
首先,我們先看一下什么是持續(xù)交付。我們認為,持續(xù)交付至少應(yīng)該包含這4點:
●?持續(xù):顧名思義,是均勻的、分散的。具體來說是要:
粒度小:?持續(xù)發(fā)布的粒度一定要很小,大了便很難做到“持續(xù)”。
頻率高:發(fā)布頻率要非常高。
●?快速:?持續(xù)交付中整個的交付過程是很快的,交付頻率也是很高的。要做到快速需要。
工序短:在測試、發(fā)布、開發(fā)等各個階段中都要做到“短”。這樣才能做到快速地反饋、快速地響應(yīng)。
等待少:?工序和工序之間、工序和其他流程之間的等待應(yīng)做到“少”。
反饋快:?提交代碼后,應(yīng)在盡短時間內(nèi)反饋此次提交的問題,應(yīng)盡快修復(fù)問題再盡快得到又一次的修復(fù)反饋。
●?高質(zhì)量:持續(xù)交付是要能夠保證質(zhì)量的,一定要做到高質(zhì)量。高質(zhì)量需要保證:
質(zhì)量可見性:?判斷做得好不好,首先我們要看到它,所以可見性是非常重要的。
缺陷少:?軟件應(yīng)是按照預(yù)期設(shè)計去運行的,而不是有很多潛在的缺陷在里面。
故障少:?每次軟件故障帶來的不僅僅是客戶的損失,也是軟件團隊的損失。很多客戶機會、業(yè)務(wù)資產(chǎn)會因為故障太多而白白損失掉。
● 低風(fēng)險:在現(xiàn)在的互聯(lián)網(wǎng)環(huán)境下,風(fēng)險無處不在,所以我們要做到安全、合規(guī)且可信。
軟件可觀測:?要知道軟件的風(fēng)險,最重要的一點就是可觀測,知道軟件當(dāng)前是什么樣子的。
發(fā)布可控:?我們后續(xù)會專門講到。
問題可回溯:?如果出現(xiàn)了發(fā)布問題或軟件故障,我們能夠回溯整個問題的來源。從哪開始、從哪個地方引入的,都需要能回溯起來。
系統(tǒng)可回滾:?如果有問題真的解決不了或沒法快速解決,我們需要能夠快速把它回滾掉,以避免造成更大的風(fēng)險。
以上是持續(xù)交付的4個關(guān)鍵點,只有滿足了持續(xù)、快速、高質(zhì)量、低風(fēng)險這4點才是實現(xiàn)了持續(xù)交付。?這4點是缺一不可的。粒度小、頻率高,是快速的前提。相應(yīng)地,只有質(zhì)量高了,風(fēng)險才能夠低一些。
問題是:如何做到呢?
基于云和云原生技術(shù)的持續(xù)交付
我們認為,云原生時代,要實現(xiàn)持續(xù)交付需要做到這3點:不可變基礎(chǔ)設(shè)施、持續(xù)交付流水線、安全可信發(fā)布。
1、不可變基礎(chǔ)設(shè)施
有一本書叫做《集裝箱改變世界》。這本書講述了集裝箱的發(fā)明讓原本零碎松散的貨物運輸體系變成以集裝箱為單位,并由此帶來了整個貨運成本的95%的降低。
如果我們看軟件交付,以往我們的開發(fā)語言構(gòu)建方式是各種各樣的,程序的打包、運行、管理方式也都不一樣,這些不同使得我們的軟件交付面臨著很大的風(fēng)險。
在容器出現(xiàn)之前,大家在運維工具、部署工具上做了很多嘗試,但是都不太成功,整體也不如容器流行。其原因便是容器做的就像集裝箱做的事情——標(biāo)準(zhǔn)化。
基于容器我們又做了K8S,做了容器的分發(fā)和整個部署運維體系,運行的環(huán)境也做掉了。在此基礎(chǔ)上,誕生了各種各樣的云原生的數(shù)據(jù)庫、云原生的中間件。這樣云原生的整體標(biāo)準(zhǔn)就出來了。就像集裝箱帶來的改變一樣,研發(fā)體系實現(xiàn)了標(biāo)準(zhǔn)化,由此我們便可以以相同的方式去對待不同技術(shù)棧寫出的程序。
整體來看,不可變基礎(chǔ)設(shè)施的應(yīng)用為我們帶來了以下幾點“紅利”:
(1)消除了不一致帶來的不確定性:?以前一個程序換了一個環(huán)境可能就跑不動了,其中的問題便是底層出現(xiàn)了不一致帶來的bug。
(2)減少不一致的風(fēng)險:?風(fēng)險很難預(yù)估。像一個Java程序里面,你大部分跑的是對的,但是在某些情況下,它會出現(xiàn)異常,小版本的差異會產(chǎn)生更多異常的風(fēng)險。這種情況下你會發(fā)現(xiàn)風(fēng)險是非常難排查的,而且風(fēng)險帶的后果很嚴重。
(3)減少維護成本:?因為很多底層的東西被標(biāo)準(zhǔn)化了,就不用我們?nèi)プ隽恕1热鏚8S就做了很多這樣的事情。
(4)部署簡化了:?都是同樣一套東西,就像集裝箱一樣,運輸就是了。
(5)環(huán)境維護成本降低了:?普遍使用標(biāo)準(zhǔn)化后便不需要有太多的負擔(dān),只要遵照這個標(biāo)準(zhǔn)就行。
(6)工具的開發(fā)和學(xué)習(xí)成本的降低了。
不可變基礎(chǔ)設(shè)施帶給我們非常大的技術(shù)紅利,我們生態(tài)越來越完整。只是這時,我們原來的習(xí)慣、思維或者工作方式都要發(fā)生變化。
2、持續(xù)交付流水線
持續(xù)交付流水線一定程度上是把我們的整個軟件交付的過程完整地串接在一起。
上圖展示的是一個非常典型的流水線:從代碼提交到合并、構(gòu)建、生成一個制品、接口測試、功能驗證、類生產(chǎn)環(huán)境部署驗證到最終驗收、上線。
這個流水線是一個完整的過程。沒有間斷、沒有跳過,是一層層往后走的。
有了這個流水線之后,如果代碼質(zhì)量很好、自動化率很高,整體就會自動地在很短的時間內(nèi)告知我們上線成功。這是一個非常美妙的體驗,流暢而省力。
要想達到上面流暢的體驗,我們對流水線是有要求的,具體來說有如下幾點:
(1)可描述性
流水線是研發(fā)模式的具象化表達:?流水線應(yīng)該是一個可描述的東西。研發(fā)模式其實是通過流水線或其他一些手段描述出來的。
發(fā)布流程的一致性:?有了流水線之后,每次的發(fā)布流程都是一樣的。
最佳實踐可快速復(fù)制:?在一個公司里,不同團隊的研發(fā)實踐差別往往非常大,因為很多東西是在口口相傳或者是文檔里的,不同的人對其中內(nèi)容有不同的掌握、解讀方式。但是流水線可以實現(xiàn)快速的復(fù)制。把流程用文章寫出來不如讓它落實在流水線中效果好。
(2)可觀測性
開發(fā)、發(fā)布過程可見:?在流水線中,不僅僅是當(dāng)前的發(fā)布、開發(fā)過程是可以看到的,歷史發(fā)布過程、開發(fā)過程也是可以看到的。每一次的發(fā)布經(jīng)過了哪些階段、每個階段是什么結(jié)果,都是可以看到的。如此便可以知道整個流程是什么樣子,整個流程的質(zhì)量是什么樣子,中間哪個節(jié)點有可能出現(xiàn)問題。
發(fā)布過程有保障:?整個流水線中我們看到有很多的驗證節(jié)點、接口測試、預(yù)發(fā)驗收。所有這些節(jié)點的成本都不小,但是它們卻能保證最后發(fā)布上線的結(jié)果是成功的、穩(wěn)定的。如此,有了流水線的運用,整個發(fā)布過程就有了保障。
(3)自動化
自動化顧名思義就是盡量減少人工在過程中的干預(yù)。若每一次階段間的銜接是靠人工完成的,它中間的等待時長以及它的協(xié)同成本就會比較高,會帶來各種各樣的風(fēng)險,所以我們應(yīng)該做到整個發(fā)布過程是完全自動化的。從代碼提交到最后上線,全過程是完全由流水線牽動的。即使中間有些步驟需要人去做驗收或者測試,但是這也只是一個工序。這個工序完了之后執(zhí)行人點個確定,說我驗收成功了,之后就會自動地往下發(fā)。因此,整個過程是一個自動化的過程。
3、安全可信發(fā)布
在軟件交付中,一個代碼、配置,甚至是一個依賴的變化,都會引發(fā)制品的改變。制品的改變會經(jīng)過流水線的一系列節(jié)點。這些節(jié)點中間有很多需要去驗證、關(guān)注和管控的點,例如代碼審查、測試驗證、評審、發(fā)布管控;也會有很多的規(guī)則、檢測項,例如代碼質(zhì)量合規(guī)、安全檢測。
這些規(guī)則加上這些檢測項,會最終形成一個反饋,表明這次發(fā)布是不是可信的。如果反饋有問題,那就不應(yīng)該發(fā)布,如果反饋沒有問題那便可以繼續(xù)往下走。
作為安全可信發(fā)布來講,首先它要能夠降低發(fā)布的風(fēng)險,防止缺陷帶來的業(yè)務(wù)損失。更重要的是降低發(fā)布的心智負擔(dān),不會不敢發(fā)布。
同時,通過安全可信發(fā)布我們可以獲得質(zhì)量的反饋,讓質(zhì)量是看得見的。讓我們能做到及時反饋、及時修復(fù),整個開發(fā)效率就會變高。
享受持續(xù)交付的紅利
持續(xù)交付可以帶來很多的好處,例如:
(1)消除對個人的依賴:?所有的信息都是共享的,可見、可控、可度量、可加速
(2)降低團隊之間的損耗:?流程一致,所有版本一致,出現(xiàn)故障時更好處理。
(3)降低測試成本、提升質(zhì)量:?自動化的測試是可以回歸的,可以不斷地運行的,也可以重復(fù)的,成本遠低于手工測試。在微服務(wù)架構(gòu)下如果出現(xiàn)問題,也可以更清晰、方便地定位。
(4)降低發(fā)布風(fēng)險:?版本可以回溯,一致性也比較好,因而發(fā)布風(fēng)險也會很好地被控制。另外,有了可信發(fā)布的支持,整體的發(fā)布成功率也會更有保障。
接下來我們將從:不可變基礎(chǔ)設(shè)施、持續(xù)交付流水線、安全可信發(fā)布3個層面,逐一深入,?通過系列文章,為大家一一講解。
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。?
總結(jié)
以上是生活随笔為你收集整理的做到这4点,才是真正的持续交付| 研发效能提升36计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云表格存储全面升级,打造一站式物联网
- 下一篇: 程序媛如何自我突破?