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

第1章 DevOps誕生與發(fā)展

1.1 DevOps概述

DevOps一詞來自Development與Operations的組合,是一種重視軟件開發(fā)人員(Dev)和運(yùn)維人員(Ops)之間溝通的文化、運(yùn)動(dòng)或慣例。通過將人、流程和技術(shù)結(jié)合起來,DevOps利用自動(dòng)化的流程來構(gòu)建、測試、發(fā)布軟件,使“軟件交付”與“架構(gòu)變更”變得更加快捷、頻繁和可靠。DevOps幫助團(tuán)隊(duì)提高軟件和服務(wù)的交付速度,使團(tuán)隊(duì)能夠更好地為客戶服務(wù),并提高其在市場中的競爭力。

簡而言之,DevOps可以定義為通過更好的溝通和協(xié)作,使開發(fā)和運(yùn)維保持較高的研發(fā)效率和文化的一致。

DevOps的誕生是為了填補(bǔ)開發(fā)端到運(yùn)維端之間的信息鴻溝,改善團(tuán)隊(duì)之間的協(xié)作關(guān)系。隨著DevOps的發(fā)展,產(chǎn)品管理、開發(fā)、運(yùn)維、測試和信息安全工程師均加入其中,形成一套針對(duì)多部門間溝通與協(xié)作問題的流程和方法。

DevOps并未對(duì)任何特定的流程、工具和技術(shù)有偏好,也并未規(guī)定任何特定的方法和環(huán)境。DevOps并不是框架或者方法,實(shí)際上只是一系列的原理和實(shí)踐經(jīng)驗(yàn),這些原理和實(shí)踐經(jīng)驗(yàn)并不會(huì)執(zhí)行任何特定的程序、工具或技術(shù),而是使用DevOps原理和經(jīng)驗(yàn)來指導(dǎo)使用這些程序、工具和技術(shù)。一個(gè)不認(rèn)可DevOps文化和原理的團(tuán)隊(duì),無論使用怎樣的技術(shù)和工具,都不能算是真正地實(shí)踐了DevOps。

1.1.1 DevOps文化

要真正了解DevOps首先要理解DevOps文化。在學(xué)習(xí)之初,用戶需要暫時(shí)摒棄市面上各種眼花繚亂的DevOps工具的宣傳,應(yīng)該把握DevOps的本質(zhì),這樣才能在今后的實(shí)踐中不被各種復(fù)雜的技術(shù)和高深的術(shù)語所迷惑。在組織層面,團(tuán)隊(duì)相關(guān)成員之間需要持續(xù)溝通、協(xié)作和共擔(dān)責(zé)任,打破團(tuán)隊(duì)間的孤島狀態(tài),不需交接,也不需等待其他團(tuán)隊(duì)的審批,同心協(xié)力,保證快速且持續(xù)的創(chuàng)新和高質(zhì)量的交付。

DevOps文化是團(tuán)隊(duì)協(xié)作的文化,需要團(tuán)隊(duì)所有成員的理解和認(rèn)可,單憑個(gè)人是無法實(shí)踐DevOps的,包括如下。

1.協(xié)作的可見性

不同的團(tuán)隊(duì)或成員的DevOps流程、優(yōu)先級(jí)和關(guān)注點(diǎn)互相可見,有統(tǒng)一的目標(biāo)和衡量標(biāo)準(zhǔn)。這是一個(gè)健康的DevOps文化的標(biāo)志,也是高效協(xié)作的基礎(chǔ)。

2.負(fù)責(zé)范圍的轉(zhuǎn)變

團(tuán)隊(duì)成員需要參與他們角色對(duì)應(yīng)工作范圍之外的階段。例如,研發(fā)人員不僅要對(duì)開發(fā)階段負(fù)責(zé),還要對(duì)軟件發(fā)布后運(yùn)維階段的性能和穩(wěn)定性負(fù)責(zé);運(yùn)維人員不僅要對(duì)軟件運(yùn)行的環(huán)境負(fù)責(zé),還要對(duì)軟件的安全性、合規(guī)性負(fù)責(zé),并且在軟件規(guī)劃階段就要參與。

3.縮短發(fā)布周期

縮短發(fā)布周期可以讓計(jì)劃和風(fēng)險(xiǎn)管理更容易,同時(shí)減少對(duì)系統(tǒng)穩(wěn)定性的影響,還可以讓組織適應(yīng)和應(yīng)對(duì)不斷變化的客戶需求和競爭壓力。

4.持續(xù)學(xué)習(xí)

DevOps提倡快速迭代和快速試錯(cuò),融入失敗經(jīng)驗(yàn),不斷改進(jìn),從而加速創(chuàng)新并適應(yīng)市場變化,不斷學(xué)習(xí),不斷成長。

1.1.2 DevOps實(shí)踐

任何企業(yè)的DevOps實(shí)踐的最終目標(biāo)都是確保相關(guān)人員(包括用戶)的期望和需求能有效、快速地開展。DevOps滿足用戶以下需求和期望:①獲得他們想要的功能;②在任何需要時(shí)都能獲得他們想要的反饋;③更快、更新的功能;④發(fā)布的新版本的質(zhì)量夠高。

只有當(dāng)企業(yè)能滿足這些用戶需求,用戶的忠誠度才會(huì)高,從而企業(yè)的市場競爭力才能得到提升,并最終增強(qiáng)企業(yè)的品牌和市場價(jià)值。DevOps對(duì)企業(yè)的頂線和底線有直接影響,企業(yè)可以在創(chuàng)新和用戶反饋上投入更多,從而持續(xù)改變其系統(tǒng)和服務(wù),以保持用戶的黏性。

任何企業(yè)或者團(tuán)隊(duì)在實(shí)踐DevOps的過程中都會(huì)受其所處的行業(yè)和領(lǐng)域的影響,所以要把握住DevOps實(shí)踐的核心原則和核心做法。

DevOps實(shí)踐的核心原則:①協(xié)作機(jī)制和溝通機(jī)制;②響應(yīng)變化的敏捷度;③軟件設(shè)計(jì)能力;④快速試錯(cuò);⑤持續(xù)學(xué)習(xí)和創(chuàng)新;⑥自動(dòng)化流程和工具。

DevOps實(shí)踐的核心做法包括:①版本控制;②持續(xù)集成(Continuous Integration,CI)/持續(xù)部署(Continuous Deployment,CD);③配置管理;④基礎(chǔ)設(shè)施即代碼;⑤持續(xù)監(jiān)控;⑥持續(xù)迭代。

1.1.3 DevOps生命周期

DevOps生命周期(以線性方式描述時(shí),也稱為持續(xù)交付管道)是一系列迭代式、自動(dòng)化的開發(fā)流程(也稱為工作流程),在更大的自動(dòng)化和迭代式的開發(fā)生命周期內(nèi)執(zhí)行,旨在優(yōu)化高質(zhì)量軟件的快速交付。工作流程名稱和數(shù)量因人而異,通常可歸結(jié)為6類(如圖1-1所示)。

圖1-1 DevOps生命周期涉及的工作流程

1.規(guī)劃(或構(gòu)思)

根據(jù)劃分了優(yōu)先級(jí)的最終用戶反饋和案例研究,以及來自所有內(nèi)部利益相關(guān)方的輸入,團(tuán)隊(duì)確定下一個(gè)發(fā)行版中的新功能或特性的范圍。規(guī)劃階段的目標(biāo)是通過生成在交付后可實(shí)現(xiàn)預(yù)期成果和價(jià)值的待辦工作列表,最大程度提高產(chǎn)品的業(yè)務(wù)價(jià)值。

2.開發(fā)

編碼環(huán)節(jié),開發(fā)人員根據(jù)待辦工作列表中的用戶情景和工作項(xiàng),編碼、測試和構(gòu)建新功能和增強(qiáng)功能。常用的實(shí)踐組合包括測試驅(qū)動(dòng)開發(fā)(Test-Driven Development,TDD)、配對(duì)編程和同行代碼評(píng)審等。開發(fā)人員通常使用本地工作站來執(zhí)行代碼編寫和測試的“內(nèi)部循環(huán)”,再將代碼交給持續(xù)交付管道。

3.集成(或構(gòu)建,或持續(xù)集成和持續(xù)部署)

新代碼集成到現(xiàn)有代碼庫中,然后執(zhí)行自動(dòng)化測試并打包到可執(zhí)行文件中,以進(jìn)行部署。常見的自動(dòng)化活動(dòng)包括:將代碼變更合并到“主”副本中,從源代碼存儲(chǔ)庫中檢出代碼,自動(dòng)執(zhí)行編譯、測試,然后打包為可執(zhí)行文件。最佳實(shí)踐是將持續(xù)集成階段的輸出存儲(chǔ)在二進(jìn)制存儲(chǔ)庫中,以備后續(xù)階段使用。

4.部署(通常稱為持續(xù)部署)

(來自集成的)運(yùn)行時(shí),構(gòu)建輸出部署到運(yùn)行時(shí)環(huán)境,通常是執(zhí)行運(yùn)行時(shí)測試的開發(fā)環(huán)境,用于驗(yàn)證質(zhì)量、合規(guī)性和安全性。如果發(fā)現(xiàn)錯(cuò)誤或缺陷,開發(fā)人員有機(jī)會(huì)在任何最終用戶看到問題之前攔截并修補(bǔ)任何問題。通常存在開發(fā)、測試和生產(chǎn)環(huán)境,每個(gè)環(huán)境都需要逐步“嚴(yán)格”的質(zhì)量關(guān)口。部署到生產(chǎn)環(huán)境的最佳實(shí)踐通常是首先部署到最終用戶的子集,然后在產(chǎn)品趨于穩(wěn)定后,逐步向所有用戶部署。

5.運(yùn)維

如果將功能交付到生產(chǎn)環(huán)境描述為“第1天”,那么功能在生產(chǎn)環(huán)境中運(yùn)行就可稱為“第2天”。監(jiān)控功能的性能、行為和可用性可確保功能為最終用戶增值。運(yùn)維確保功能平穩(wěn)運(yùn)行,并且服務(wù)中沒有中斷,也就是確保網(wǎng)絡(luò)、存儲(chǔ)、平臺(tái)、計(jì)算和安全態(tài)勢都正常。如果出錯(cuò),運(yùn)維可確保發(fā)現(xiàn)事件,提醒適當(dāng)?shù)娜藛T,確定問題,并應(yīng)用修復(fù)措施。

6.學(xué)習(xí)(也稱為持續(xù)反饋)

收集來自最終用戶和客戶對(duì)特性、功能、性能和業(yè)務(wù)價(jià)值的反饋,根據(jù)這些反饋,規(guī)劃下一個(gè)發(fā)行版中的增強(qiáng)和功能;還包括來自運(yùn)維活動(dòng)的任何學(xué)習(xí)和待辦工作項(xiàng),幫助開發(fā)人員主動(dòng)避免將來再次發(fā)生以往錯(cuò)誤。這就是規(guī)劃階段的“總結(jié)”,我們“不斷改進(jìn)”。

除此之外,還有另外三個(gè)重要的持續(xù)工作流程。

1.持續(xù)測試

典型的DevOps生命周期還包含需要在集成和部署之間完成一個(gè)單獨(dú)的“測試”階段。而DevOps更進(jìn)一步,可以在各工作流程中執(zhí)行測試的某些要素,如:在規(guī)劃中執(zhí)行行為驅(qū)動(dòng)的開發(fā),在開發(fā)中執(zhí)行單元測試與合規(guī)測試,在集成中執(zhí)行靜態(tài)代碼掃描、CVE掃描和開源代碼分析(Linting),在部署中執(zhí)行冒煙測試、滲透測試、配置測試,在運(yùn)維中執(zhí)行混沌測試、合規(guī)性測試,在學(xué)習(xí)中執(zhí)行A/B測試。測試是一種強(qiáng)大的風(fēng)險(xiǎn)和漏洞發(fā)現(xiàn)方法,為產(chǎn)品提供接受、緩解或補(bǔ)救風(fēng)險(xiǎn)的機(jī)會(huì)。

2.安全

雖然瀑布式方法和敏捷實(shí)施在交付或部署后添加了安全工作流程,但DevOps努力從一開始(規(guī)劃)就整合安全工作流程(以確保能夠以最低的代價(jià)盡早解決安全問題),并且在整個(gè)開發(fā)周期中持續(xù)整合安全工作流程。這種安全性方法稱為“左移”。一些組織的左移工作不甚理想,這也導(dǎo)致了DevSecOps的興起(后面章節(jié)會(huì)詳細(xì)介紹)。

3.合規(guī)性(治理和風(fēng)險(xiǎn))

在開發(fā)過程的整個(gè)生命周期都能有效進(jìn)行合規(guī)和風(fēng)險(xiǎn)的治理、把控。受監(jiān)管行業(yè)通常必須強(qiáng)制性滿足特定級(jí)別的可觀察性、可跟蹤性和可訪問性,以表明自己如何在運(yùn)行時(shí)環(huán)境中交付和管理功能。這需要在持續(xù)交付管道和運(yùn)行時(shí)環(huán)境中規(guī)劃、制定、測試和執(zhí)行策略。合規(guī)性措施的可審計(jì)性對(duì)于向第三方審計(jì)機(jī)構(gòu)證明合規(guī)性而言極其重要。

【小結(jié)】隨著近些年DevOps理念被開發(fā)者與團(tuán)隊(duì)認(rèn)可,越來越多的公司開始實(shí)踐DevOps;同時(shí),越來越多的理念、工具和角色被納入DevOps的范疇,如敏捷開發(fā)、自動(dòng)化測試、軟件安全測試等,已成為DevOps生命周期的一部分,并廣泛應(yīng)用于軟件開發(fā)實(shí)踐。

主站蜘蛛池模板: 比如县| 遂昌县| 北安市| 蒙自县| 深圳市| 凤庆县| 图木舒克市| 泰安市| 米林县| 托里县| 正宁县| 江陵县| 三门县| 马公市| 瓮安县| 衢州市| 怀仁县| 永福县| 湖口县| 永寿县| 石家庄市| 西昌市| 包头市| 棋牌| 兰考县| 和平区| 美姑县| 海城市| 吴堡县| 那坡县| 寿宁县| 通海县| 营口市| 柞水县| 商城县| 阿克苏市| 黄骅市| 石河子市| 合阳县| 遂宁市| 阜新市|