- 軟件交付通識
- 董越
- 1787字
- 2022-05-06 13:18:17
3.5 持續(xù)交付
Martin Fowler是這么描述持續(xù)交付的:“持續(xù)交付是一種軟件開發(fā)實踐,令軟件可隨時發(fā)布上線……為此需要持續(xù)地集成軟件開發(fā)成果,構(gòu)建可執(zhí)行程序,并運行自動化測試以發(fā)現(xiàn)問題,進而把可執(zhí)行程序逐步推送到越來越像生產(chǎn)環(huán)境的各個測試環(huán)境中(并測試),以保證它最終可以在生產(chǎn)環(huán)境中運行。”[7]
Jez Humble是這么描述持續(xù)交付的:“持續(xù)交付是一種能力,能夠讓各類變更(如新特性、配置變更、缺陷修復(fù)、嘗試性內(nèi)容等)以安全、快速、可持續(xù)的方式交付到生產(chǎn)環(huán)境中或用戶手上。”[8]
更詳細的介紹,請參考2010年出版的《持續(xù)交付:發(fā)布可靠軟件的系統(tǒng)方法》一書。
3.5.1 包括所有質(zhì)量驗證工作
持續(xù)交付是持續(xù)集成的擴展。首先是擴展到所有質(zhì)量驗證工作:持續(xù)集成主要關(guān)注的是頻繁地把各個改動匯聚在一起,發(fā)現(xiàn)并修復(fù)其質(zhì)量上的問題。其中發(fā)現(xiàn)并修復(fù)問題所采用的主要是不需要測試環(huán)境的手段,比如構(gòu)建、代碼掃描、單元測試等。然而,發(fā)現(xiàn)問題的方法可不止這些,還需要到各個測試環(huán)境中進行其他各類測試。持續(xù)交付希望這些需要測試環(huán)境的測試也能夠比較頻繁地發(fā)生。
為什么要讓這些測試比較頻繁地發(fā)生呢?理由跟為什么要持續(xù)集成差不多。
前面提到,越早發(fā)現(xiàn)問題,越容易修復(fù)問題。而構(gòu)建、代碼掃描、單元測試并不能發(fā)現(xiàn)所有的問題,還有不同模塊間配合的問題、環(huán)境配置的問題等有待早點發(fā)現(xiàn),以便早點修復(fù)。
前面提到,集成后可以工作的代碼,有利于跟蹤進度和提供對進度的感知。而經(jīng)過了部署和更多測試的代碼,質(zhì)量更高,更接近可發(fā)布狀態(tài),因此能更好地提供對進度的感知。
前面提到,越是頻繁地集成,越是有利于產(chǎn)品早點發(fā)布上線。而頻繁地部署測試環(huán)境并測試,亦有利于從需求提出到發(fā)布上線整體時間的縮短。于是用戶可以更早地將產(chǎn)品用起來,更快地給出反饋。
為了讓這些測試能比較頻繁地發(fā)生,我們需要把以下事情做好。
? 前面提到的版本控制、自動化、過程可視化、加速也要被應(yīng)用到部署和隨后的測試中。比如把自動化應(yīng)用到測試環(huán)境部署中,實現(xiàn)測試環(huán)境的自動化部署。
? 一旦涉及測試環(huán)境特別是類似于生產(chǎn)環(huán)境的測試環(huán)境,對環(huán)境的管理其實相當(dāng)不簡單。比如如何管理環(huán)境中的各種配置及其變更,以及數(shù)據(jù)庫表結(jié)構(gòu)和內(nèi)容的變更等。這些是從持續(xù)集成擴展到持續(xù)交付后增加的很大一攤子事情。
? 持續(xù)集成中的構(gòu)建、代碼掃描、單元測試,與持續(xù)交付中增加的部署測試環(huán)境,以及測試環(huán)境中的各種測試,雖然都要頻繁地做,但是頻繁的程度是不一樣的。對于那些執(zhí)行速度快、“性價比”高的測試,則應(yīng)該很頻繁地做,比如每當(dāng)集成分支收到提交的代碼改動后就做;而對于那些比較耗時費力的測試,就不用那么頻繁地做了。所以需要自動化流程(比如流水線)支持這樣的模式:不同的階段有不同的頻率,還要保證能銜接在一起。
3.5.2 比較頻繁地發(fā)布上線
持續(xù)交付是除了將持續(xù)集成擴展到所有質(zhì)量驗證工作,還從集成測試擴展到了發(fā)布上線,旨在讓發(fā)布上線成為一件輕松、容易的事情,可以一鍵搞定:想發(fā)布時,一下子就能發(fā)布上去。這樣就可以適度頻繁地發(fā)布上線。
為此需要:
? 將自動化和自助化部署到生產(chǎn)環(huán)境,將整個自動化流程延伸到發(fā)布上線。如果測試環(huán)境已經(jīng)自動化了,這一步也不難。
? 將生產(chǎn)環(huán)境及其組成部分管理起來。如果測試環(huán)境已經(jīng)實現(xiàn)管理,這一步也不難。
以上是持續(xù)交付的全部內(nèi)容:基于持續(xù)集成,讓所有質(zhì)量驗證工作都適度頻繁地進行,并且讓發(fā)布上線能一鍵搞定,以進一步縮短軟件交付所需的時間,適度頻繁地發(fā)布上線。
3.5.3 持續(xù)部署
我們還常聽到一個詞,與持續(xù)交付相關(guān),它就是“持續(xù)部署”。這里的“部署”指的是生產(chǎn)環(huán)境部署。
Martin Fowler是這么描述持續(xù)部署的:“持續(xù)部署意味著每個通過部署流水線的變更都被自動地部署到生產(chǎn)環(huán)境中,于是每天都會有若干次生產(chǎn)環(huán)境部署。”[9]
更詳細的介紹,請參考《持續(xù)交付:發(fā)布可靠軟件的系統(tǒng)方法》一書。
持續(xù)交付是指適度頻繁地發(fā)布上線。而持續(xù)部署則基于此更進一步,頻繁到每當(dāng)一個版本通過測試時,就立刻自動把它部署到生產(chǎn)環(huán)境中。
持續(xù)交付并不排斥人工測試,只要它不過于龐大和笨重,不會讓測試的頻率變得太低就行。然而,持續(xù)部署對此的要求要高得多,它要求測試做到完全的自動化。
顯然,完全的自動化測試以及更頻繁的生產(chǎn)環(huán)境部署,能進一步縮短從需求提出到發(fā)布上線進而得到用戶反饋的整體時間,這是持續(xù)部署的主要收益。不過,顯然實現(xiàn)持續(xù)部署要比實現(xiàn)持續(xù)交付困難得多。持續(xù)部署是持續(xù)交付的極端情況,當(dāng)然也可以說是將持續(xù)交付做到了極致。
- 深入理解Net-Snmp
- App草圖+流程圖+交互原型設(shè)計教程
- 深度學(xué)習(xí)訓(xùn)練營 21天實戰(zhàn)TensorFlow+Keras+scikit-learn
- Docker源碼分析
- 知行合一: 實現(xiàn)價值驅(qū)動的敏捷和精益開發(fā)
- 實戰(zhàn)Java虛擬機:JVM故障診斷與性能優(yōu)化(第2版)
- DevOps:企業(yè)級CI/CD實戰(zhàn)
- Python與數(shù)據(jù)挖掘
- 每天5分鐘玩轉(zhuǎn)OpenStack
- 混沌工程:通過可控故障實驗提升軟件系統(tǒng)可靠性
- 嵌入式軟件調(diào)試技術(shù)
- 嵌入式軟件測試:方法、案例與模板詳解
- 精益軟件度量——實踐者的觀察與思考
- 云原生網(wǎng)關(guān)Traefik:入門、進階與實戰(zhàn)
- 測試開發(fā)實戰(zhàn)教程