優(yōu)質(zhì)文章,第一時(shí)間送達(dá)! 1. 前言借著公司今年新組建的中臺(tái)研發(fā)部東風(fēng),我作為其中的主要負(fù)責(zé)人,在研發(fā)中心主導(dǎo)推行DevOps研發(fā)管理模式轉(zhuǎn)變及質(zhì)量管理創(chuàng)新建設(shè),本篇文章摘取自今年9月底,筆者在公司內(nèi)部針對(duì)全體研發(fā)人員的一次DevOps培訓(xùn)PPT中的部分內(nèi)容,涉及公司敏感信息和部分章節(jié)內(nèi)容順序已經(jīng)作過(guò)處理。 相信公眾號(hào)內(nèi),大部分讀者此前,對(duì)DevOps沒(méi)并有過(guò)多或全面的接觸,為了回饋?zhàn)x者,因此將此次公司內(nèi)訓(xùn)其中涉及DevOps一些核心理念和實(shí)踐經(jīng)驗(yàn)抽取出來(lái),分享給大家。(如有不正確的,歡迎糾正) 2. 到處都在說(shuō)DevOps,到底DevOps是什么?最近幾年,相信大家經(jīng)常會(huì)看到DevOps這個(gè)詞,也有很多專門(mén)以DevOps為主題的大型行業(yè)技術(shù)峰會(huì)。雖然DevOps最近幾年才在國(guó)內(nèi)公司流行,但實(shí)際上DevOps早在2009 年就已經(jīng)被提出來(lái)了。 那經(jīng)常一直說(shuō)DevOps,DevOps到底是個(gè)什么東西? DevOps目前其實(shí)并沒(méi)有一個(gè)權(quán)威的定義,即便一些在DevOps領(lǐng)域耕耘很久的大師,對(duì)DevOps也無(wú)法給出一個(gè)統(tǒng)一的定義,久而久之,行業(yè)也有這樣的一個(gè)說(shuō)法:“如果有1000個(gè)人在說(shuō)DevOps,那DevOps可能就有一千種意思?!?/span> Anyway,無(wú)論有多少種意思,但我想說(shuō)的是DevOps它最根本的那個(gè)意思是基本上類似的。 2.1 聊一聊DevOps組成 看到上面這張圖,可能有人就會(huì)說(shuō)DevOps是不是Dev+Ops。 單純從字面上來(lái)理解,DevOps 是Dev(開(kāi)發(fā)人員)+Ops(運(yùn)維人員),雖然名字來(lái)源于開(kāi)發(fā)和運(yùn)維的縮寫(xiě),但DevOps并不是簡(jiǎn)單的就是開(kāi)發(fā)加運(yùn)維。 DevOps 所涵蓋的角色范圍會(huì)更廣:除了開(kāi)發(fā)、測(cè)試、運(yùn)維還會(huì)涉及到項(xiàng)目經(jīng)理、產(chǎn)品經(jīng)理,甚至和銷售、市場(chǎng)等各個(gè)部門(mén),跨職能部門(mén)互相合作,完成某一項(xiàng)目或任務(wù)。 2.2 DevOps不是什么 在幫助大家理解 DevOps 到底是什么之前,先說(shuō)說(shuō) DevOps 不是什么,很多人對(duì) DevOps 可能存在一些誤解: 誤解一:DevOps不是一種工具,有人可能會(huì)說(shuō)我在用Docker又或Jenkins等工具,是不是就表明在做DevOps了?然而這些并不意味著就在做DevOps的事情。 誤解二:DevOps不是一個(gè)新角色或者說(shuō)是一個(gè)新的職位, 雖然說(shuō)國(guó)內(nèi)確實(shí)有些公司有單獨(dú)的職位是DevOps工程師,但并不代表,DevOps是一個(gè)職位,嚴(yán)格來(lái)說(shuō)它是一類工程師的統(tǒng)稱。 誤解三:還有人說(shuō),DevOps出來(lái)之后,是不是由一個(gè)獨(dú)立的團(tuán)隊(duì)去做所有事情,從開(kāi)發(fā)到運(yùn)維,一個(gè)部門(mén)就都干掉。 其實(shí)上面這幾點(diǎn)都沒(méi)有錯(cuò),但對(duì)于DevOps這個(gè)概念而言,太過(guò)于狹隘了,不是簡(jiǎn)單的說(shuō)DevOps就是開(kāi)發(fā)加運(yùn)維,DevOps是由一個(gè)團(tuán)隊(duì)或者由開(kāi)發(fā)加運(yùn)維就能搞定的。 實(shí)際上DevOps從需求到設(shè)計(jì)到開(kāi)發(fā)、到測(cè)試到運(yùn)維,甚至是線上的運(yùn)營(yíng)反饋整個(gè)全生命周期的,所以它應(yīng)該是一個(gè)打通多個(gè)部門(mén)協(xié)調(diào),協(xié)作的這樣的一個(gè)平臺(tái)。至于工具和自動(dòng)化實(shí)際上只是DevOps實(shí)現(xiàn)的一種手段?;蛘哒f(shuō)DevOps是通過(guò)工具,自動(dòng)化,來(lái)達(dá)到這種通過(guò)工具鏈與持續(xù)集成、交付、反饋、優(yōu)化進(jìn)行端到端整合,完成無(wú)縫的跨團(tuán)隊(duì)、跨系統(tǒng)協(xié)作。 3. DevOps包含一系列工具鏈、平臺(tái)DevOps實(shí)踐涉及到開(kāi)發(fā)部門(mén)以及軟件研發(fā)的整個(gè)生命周期,這意味著在整個(gè)開(kāi)發(fā)生命周期中,涉及到一大批新舊工具,包括從規(guī)劃、編碼、測(cè)試、發(fā)布、監(jiān)控等自動(dòng)化的流程工具。 3.1 DevOps包含了一系列工具鏈 DevOps融合了一系列基本原則和實(shí)踐的方法論,并從這些實(shí)踐中派生出了各種工具。這些工具體現(xiàn)在軟件開(kāi)發(fā)和交付過(guò)程的不同階段:
3.2 國(guó)內(nèi)主流的三大DevOps管理平臺(tái) 除了上面說(shuō)的這些工具鏈以外,也有一些DevOps管理平臺(tái)服務(wù),國(guó)內(nèi)比較出名的就三個(gè)。
其中云效和TAPD屬于SaaS類平臺(tái),靈雀云是基于容器技術(shù),以DevOps為理念,面向微服務(wù)應(yīng)用的新一代PaaS平臺(tái)。 3.3 對(duì)DevOps工具鏈、平臺(tái)存在的誤區(qū) 好的工具、平臺(tái)可以對(duì)DevOps的實(shí)施提供出非常強(qiáng)有力的支持,但并不代表,實(shí)施DevOps,就一定需要重新去引入或購(gòu)買(mǎi)一堆工具、平臺(tái)。 問(wèn)題的關(guān)鍵在于:如何解決問(wèn)題,而不是具體應(yīng)用哪一款的工具、平臺(tái)。如果組織僅僅是購(gòu)買(mǎi)工具而不改變工作流程,這樣不會(huì)改變?nèi)魏问虑椤?/span> 4. DevOps成功的關(guān)鍵:組織文化的轉(zhuǎn)變DevOps 成功的關(guān)鍵在于文化轉(zhuǎn)變,除了上面提到的工具,組織文化的轉(zhuǎn)變也同等重要,我們總結(jié)出了很多 DevOps 的其他因素,比如人(People)的思想和思考方式、開(kāi)發(fā)和運(yùn)維的流程(Process)、精益(Lean)、自動(dòng)化(Automation)、測(cè)量(Measurement。 在組織文化方面,DevOps 推崇:
5. 重新定義DevOps到此你大概能對(duì)DevOps有一個(gè)概要的認(rèn)識(shí)和理解,DevOps它是由一些規(guī)范方法,自動(dòng)化實(shí)踐,合作文化等在組織內(nèi)部不斷演進(jìn)修復(fù)而產(chǎn)生的一種提升軟件工程發(fā)布質(zhì)量和效率的方法和實(shí)踐。 總結(jié)為三點(diǎn):
6. 實(shí)踐DevOps需要建立哪些能力6.1 能力一:DevOps不可或缺的自動(dòng)化能力 自動(dòng)化是DevOps底線?。。∪绻浖到y(tǒng)沒(méi)有一套較完善的自動(dòng)化測(cè)試體系,就請(qǐng)不要談DevOps,要想同時(shí)提升發(fā)布效率和產(chǎn)品穩(wěn)定性,以自動(dòng)化替代手工方式快速、頻繁的對(duì)軟件質(zhì)量進(jìn)行驗(yàn)證是首要的手段。 主要體現(xiàn)在三點(diǎn)上:
6.2 能力二:建立持續(xù)交付能力 實(shí)現(xiàn)DevOps,需要給產(chǎn)品交付團(tuán)隊(duì)提供一個(gè)軟件持續(xù)交付平臺(tái)或者能持續(xù)交付的部署流水線,讓軟件從代碼提交構(gòu)建到交付給用戶的整個(gè)過(guò)程都能自動(dòng)在流水線上完成。 主要體現(xiàn)在三點(diǎn)上:
6.3 能力三:利益共同利的合作文化 以提高業(yè)務(wù)響應(yīng)效率出發(fā),要有一榮俱榮,精誠(chéng)合作,共同進(jìn)步的工作態(tài)度。 7. 實(shí)踐DevOps應(yīng)該如何實(shí)施DevOps所涉及的內(nèi)容是非常廣的,根據(jù)不同的公司現(xiàn)狀的不同,實(shí)施落地的方式也會(huì)有所不一樣。 不要盲目的去追從DevOps,不是因?yàn)榇蠹叶甲觯晕乙惨觯?strong>需要具備更高的全局觀,從瓶頸點(diǎn)開(kāi)始著手。 應(yīng)該出于解決某個(gè)業(yè)務(wù)問(wèn)題的角度出發(fā),知道要解決什么樣的問(wèn)題,這是非常非常重要的。如果你的交付質(zhì)量和交付效率在自身企業(yè)內(nèi)覺(jué)得沒(méi)有問(wèn)題,如果你們覺(jué)得沒(méi)有問(wèn)題,想想平時(shí)升級(jí)發(fā)版加班的苦逼。 當(dāng)你用一些實(shí)踐來(lái)解決一些業(yè)務(wù)中的實(shí)際問(wèn)題,將他們串聯(lián)起來(lái),并且形成以管道式的發(fā)布流水線后,你會(huì)發(fā)現(xiàn),其實(shí)你已經(jīng)開(kāi)始在做DevOps了。 8. DevOps轉(zhuǎn)型的實(shí)踐手段8.1 實(shí)踐一:以小批量的方式工作(開(kāi)發(fā)、架構(gòu)、組織文化的演進(jìn)) 以小批量、持續(xù)的方式進(jìn)行,通過(guò)反復(fù)實(shí)驗(yàn)、根據(jù)反饋循環(huán)快速學(xué)習(xí),找到最正確的實(shí)施路徑。這樣需要把大的問(wèn)題拆成一系列小的問(wèn)題逐個(gè)、漸進(jìn)式解決。 8.2 實(shí)踐二:創(chuàng)建反饋循環(huán) 在小批量工作的基礎(chǔ)上,我們要建立起反饋循環(huán)。反饋循環(huán)讓我們能夠持續(xù)學(xué)習(xí),基于學(xué)習(xí)進(jìn)行持續(xù)改進(jìn),持續(xù)交付流水線就是反饋循環(huán)的具體實(shí)現(xiàn)。 9.實(shí)踐DevOps最佳實(shí)踐手段:CI/CD相信大部分讀者對(duì)DevOps和CI/CD經(jīng)常會(huì)弄混淆,那么如何來(lái)理解DevOps和CI/CD之間的關(guān)系呢?可以這樣來(lái)理解:DevOps是CI/CD思想的延伸,CI/CD則是DevOps的技術(shù)核心,如果沒(méi)有CI/CD,沒(méi)有自動(dòng)化測(cè)試,DevOps是沒(méi)有任何意義的。所以說(shuō)DevOps是以CI/CD為基礎(chǔ)來(lái)優(yōu)化程序的開(kāi)發(fā)、測(cè)試、運(yùn)維等各個(gè)不同環(huán)節(jié)。 9.1 CI:持續(xù)集成 持續(xù)集成是一種開(kāi)發(fā)實(shí)踐,它倡導(dǎo)團(tuán)隊(duì)成員需要頻繁的集成他們的工作,每次集成都通過(guò)自動(dòng)化構(gòu)建(包括編譯、構(gòu)建、自動(dòng)化測(cè)試)來(lái)驗(yàn)證,從而盡快地發(fā)現(xiàn)集成中的錯(cuò)誤。讓正在開(kāi)發(fā)的軟件始終處于可工作狀態(tài),讓產(chǎn)品可以快速迭代,同時(shí)還能保持高質(zhì)量。 9.2 什么是CD? 談到CD,其中是包含了兩層內(nèi)容:持續(xù)交付和持續(xù)部署。 有時(shí)候很多人會(huì)把持續(xù)交付誤認(rèn)為成持續(xù)部署,然而兩者是兩個(gè)不同層次的能力。 持續(xù)交付: 持續(xù)交付是持續(xù)集成的延伸或者看作持續(xù)集成的下一步,它將集成后的代碼部署到類生產(chǎn)環(huán)境,確保可以以可持續(xù)的方式快速向客戶發(fā)布新的更改。如果代碼沒(méi)有問(wèn)題,可以繼續(xù)手工部署到生產(chǎn)環(huán)境中。它強(qiáng)調(diào)的是,不管怎么更新,軟件是隨時(shí)隨地可以交付的。 持續(xù)部署: 持續(xù)部署是持續(xù)交付的下一步,在持續(xù)交付的基礎(chǔ)上,由開(kāi)發(fā)人員或運(yùn)維人員自助式的定期向生產(chǎn)環(huán)境部署穩(wěn)定的構(gòu)建版本,持續(xù)部署的目標(biāo)是代碼在任何時(shí)刻都是可部署的,并可自動(dòng)進(jìn)入到生產(chǎn)環(huán)境。 說(shuō)到這里,相信大部人已經(jīng)能清楚明白了,持續(xù)交付是指團(tuán)隊(duì)確保每個(gè)變更可以部署至生產(chǎn)環(huán)境,但也許并不需要實(shí)際部署,這通??赡苁浅鲇跇I(yè)務(wù)方面的原因。而持續(xù)部署是指每個(gè)變更可以自動(dòng)部署到生產(chǎn)環(huán)境。只有成功實(shí)現(xiàn)持續(xù)交付的前提下,才能進(jìn)行持續(xù)部署。 10.DevOps提倡的原則DevOps持續(xù)交付的八大原則對(duì)可運(yùn)維性給出了這樣的定義,在企業(yè)中研發(fā)和運(yùn)維體系必然需要相互配合,開(kāi)發(fā)團(tuán)隊(duì)負(fù)責(zé)功能性需求實(shí)現(xiàn)的同時(shí),在架構(gòu)和編碼上注重非功能性需求的實(shí)現(xiàn),測(cè)試團(tuán)隊(duì)與運(yùn)維團(tuán)隊(duì)將圍繞著各自職能的需求,規(guī)劃與建設(shè)DevOps流水線中對(duì)應(yīng)的工具系統(tǒng),加速企業(yè)IT價(jià)值鏈的流轉(zhuǎn),以為企業(yè)創(chuàng)造更大的商業(yè)價(jià)值。 DevOps提倡的原則
|
|
來(lái)自: 測(cè)試開(kāi)發(fā)技術(shù) > 《待分類》