官术网_书友最值得收藏!

  • 軟件交付通識
  • 董越
  • 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ù)交付做到了極致。

主站蜘蛛池模板: 米脂县| 延安市| 长沙市| 北海市| 甘孜| 翁牛特旗| 古蔺县| 城步| 昌邑市| 景宁| 靖州| 安泽县| 台山市| 乾安县| 蓬莱市| 广丰县| 远安县| 南宁市| 大厂| 双城市| 海口市| 南华县| 靖边县| 潮州市| 钦州市| 古田县| 舒兰市| 积石山| 大厂| 合川市| 垣曲县| 渭源县| 罗田县| 房产| 黎平县| 玉树县| 襄樊市| 宜良县| 亳州市| 阆中市| 金湖县|