耿泉峰 李曦 葛維
摘? 要: 文章簡(jiǎn)述了DevOps概念、基于DevOps的軟件開發(fā)流程,并以D平臺(tái)為例對(duì)開發(fā)流程的每一步給出了示例。DevOps本質(zhì)上是將IT開發(fā)與運(yùn)維合并,借助強(qiáng)大的管理工具,引入容器化技術(shù)使當(dāng)前系統(tǒng)環(huán)境部署過程由IAAS轉(zhuǎn)向PAAS,用以規(guī)范系統(tǒng)間調(diào)用關(guān)系,并基于PAAS基礎(chǔ)之上整改配置項(xiàng)及數(shù)據(jù),使其與系統(tǒng)服務(wù)分離,實(shí)現(xiàn)靈活配置,快速實(shí)施。DevOps是軟件開發(fā)管理未來的發(fā)展趨勢(shì)。
關(guān)鍵詞: DevOps開發(fā)與運(yùn)維;DevOps軟件開發(fā)流程
中圖分類號(hào): TP391. 41? ? 文獻(xiàn)標(biāo)識(shí)碼: B? ? ?DOI:10.3969/j.issn.1003-6970.2019.01.020
【Abstract】: This paper briefly introduces the concept of DevOps and the software development process based on DevOps, and gives an example of each step of the development process with the D platform as an example. DevOps is essentially a combination of IT development and maintenance. With the help of powerful management tools and container technology, the current system environment deployment process is changed from IAAS to PAAS to standardize inter-system call relations. Based on PAAS, the configuration items and data are adjusted to separate them from system services, achieve flexible configuration and fast implementation. Shi. DevOps is the future trend of software development management.
【Key words】: DevOps development; Operation and maintenance DevOps software development process
0? 引言
DevOps(Development和Operations的組合詞)是一套完整的面向IT運(yùn)維的工作流,[1]以IT自動(dòng)化以及持續(xù)集成(CI)、持續(xù)部署(CD)為基礎(chǔ),來優(yōu)化程式開發(fā)、測(cè)試、系統(tǒng)運(yùn)維等所有環(huán)節(jié)。
它重視“軟件開發(fā)人員”和“IT運(yùn)維人員”間的協(xié)作。基于自動(dòng)的持續(xù)的軟件交付流程,使編譯,打包,發(fā)布,測(cè)試等行為能夠更高效,更穩(wěn)定。
敏捷迭代的概念愈發(fā)明顯,為支持敏捷二字,傳統(tǒng)的軟件發(fā)布模式已經(jīng)感到乏力,因此DevOps的概念應(yīng)運(yùn)而生。圖1為DevOps的概念圖。
DevOps串聯(lián)的是技術(shù)與人的問題。它包含許多技術(shù)方案,比如像持續(xù)集成這類概念已深入人心,持續(xù)集成要做好,不但需要持續(xù)集成服務(wù)器及配套的自動(dòng)化集成和測(cè)試程序,還需要與版本控制緊密結(jié)合。除此之外,還需要注重各崗位之間協(xié)作的關(guān)系。把開發(fā)與運(yùn)維相融合,這是很重要的思維轉(zhuǎn)變。
DevOps最主要的優(yōu)勢(shì)是可以持續(xù)的高效的進(jìn)行交付,這也正是這個(gè)概念興起的原因。使用DevOps的高效IT公司平均每年可以完成1460次部署。與其他未使用DevOps的IT公司相比,前者的部署頻率為后者的200倍,前者投產(chǎn)速度比后者快2555倍,前者故障恢復(fù)速度比后者快24倍。在開發(fā)及運(yùn)維工作分配過程中,后者要多花22%的時(shí)間用在為規(guī)劃好或者重復(fù)工作上,而前者卻可以多花29%的時(shí)間用在其他類型工作上面??梢钥闯隼肈evops不緊提高了產(chǎn)品產(chǎn)出效率,也提高了員工的工作質(zhì)量。
DevOps還有一個(gè)優(yōu)勢(shì)就是可以使每一個(gè)員工都理解和參與整體的產(chǎn)品生產(chǎn)過程,提高了員工的滿足和成就感,使員工產(chǎn)出更為高效。
可能你會(huì)認(rèn)為快速部署和提高投產(chǎn)質(zhì)量是自相矛盾的。其實(shí)不然,快速部署可以使投產(chǎn)過程中的問題今早暴露,產(chǎn)品可以更快交付,更快得到用戶反饋,從而更快的進(jìn)行響應(yīng)優(yōu)化?!靶〔娇炫堋笔荄evOps的形式,每次集成帶來的變化是比較小的,出現(xiàn)問題偏差較小,修復(fù)優(yōu)化也相對(duì)容易。
DevOps是開發(fā)人員,運(yùn)維人員和質(zhì)量人員之間溝通協(xié)作的“橋梁”。將傳統(tǒng)產(chǎn)品發(fā)布模式及運(yùn)維模式進(jìn)行改變,提高效率,降低成本。
DevOps目前處于急速增長(zhǎng)狀態(tài),在大型企業(yè)中尤為明顯,經(jīng)過調(diào)查,DevOps在企業(yè)中的接受度大幅提高。%74的受訪者接受并認(rèn)可了DevOps。目前,88%的大型企業(yè)開始接受并使用DevOps,中小型企業(yè)的使用占比也達(dá)到了75%。
目前采用DevOps的公司有很多,比如:Walmart、Sony、Adobe、Amazon、Apple、Facebook、LinkedIn、Airbnb、Ebay、Etsy、NASA、Starbucks、Netflix、Target,等。
大型企業(yè)正在自下而上接受DevOps,其中業(yè)務(wù)部門(35%)以及項(xiàng)目和團(tuán)隊(duì)(32%)已經(jīng)實(shí)施DevOps。不過,只有22%的大企業(yè)在整個(gè)公司范圍內(nèi)使用了DevOps[2]。
實(shí)用工具方面,DevOps工具的用量大幅。Puppet和Chef是最常用的DevOps工具,使用率均為35%。Docker增長(zhǎng)量也非常虧,使用率翻倍。Ansible的用量也顯著增加,使用率從15%增長(zhǎng)至31%。
1? DevOps流程
DevOps的流程主要?jiǎng)澐譃橐韵聨讉€(gè)部分:持續(xù)的管理計(jì)劃,持續(xù)的集成與測(cè)試,持續(xù)的交付于部署,持續(xù)的監(jiān)控與運(yùn)維,持續(xù)的分析與計(jì)劃[3]。
DevOps流程中涉及的角色為:產(chǎn)品業(yè)務(wù)人員,開發(fā)人員,測(cè)試人員,運(yùn)維人員,項(xiàng)目管理人員(Scrum Master)
1.1? 持續(xù)的管理與計(jì)劃
業(yè)務(wù)產(chǎn)品人員制定功能并于開發(fā),測(cè)試與運(yùn)維人員一起制定產(chǎn)品交付計(jì)劃[4]。每一個(gè)角色根據(jù)自身工作內(nèi)容做出建議。項(xiàng)目管理人員在這個(gè)階段制定進(jìn)度,并在流程每一個(gè)節(jié)點(diǎn)進(jìn)行狀態(tài)跟蹤。整體計(jì)劃及狀態(tài)應(yīng)該在項(xiàng)目管理平臺(tái)(比如JIRA)中對(duì)所有人為可見并實(shí)時(shí)更新狀態(tài)。
1.2? 持續(xù)集成與測(cè)試
開發(fā)人員在開發(fā)業(yè)務(wù)功能同時(shí)需同時(shí)編寫針對(duì)功能的單元測(cè)試代碼,運(yùn)維人員在編譯功能代碼的同時(shí)編譯并運(yùn)行單元測(cè)試模塊,并針對(duì)結(jié)果進(jìn)行判斷是否需要修改或向測(cè)試人員流轉(zhuǎn)。測(cè)試人員依據(jù)功能描述和接口文檔編寫接口測(cè)試用例,運(yùn)維人員在編譯部署通過后集成接口測(cè)試并反饋測(cè)試報(bào)告。整個(gè)過程的狀態(tài)應(yīng)該是對(duì)所有參與人員可見的。
1.3? 持續(xù)交付與部署
針對(duì)代碼開發(fā)實(shí)施每日構(gòu)建和集成,可以使用集成工具如jenkins進(jìn)行定時(shí)構(gòu)建并將構(gòu)建產(chǎn)物部署至仿真環(huán)境,將部署結(jié)果告知測(cè)試人員進(jìn)行驗(yàn)證。圖3為jenkins定時(shí)示例。
1.4? 持續(xù)的分析與計(jì)劃
針對(duì)項(xiàng)目管理平臺(tái)(JIRA)的每項(xiàng)工作狀態(tài)進(jìn)行分析,發(fā)現(xiàn)突破及瓶頸,并針對(duì)性的對(duì)計(jì)劃進(jìn)行變更。加入每天站立會(huì)進(jìn)行整體進(jìn)度匯總報(bào)告并吸收參與人員的建議。
2? DevOps常用工具
以下是以某電子系統(tǒng)的D運(yùn)維自動(dòng)化管理平臺(tái)(以下簡(jiǎn)稱”D平臺(tái)”)為例的DevOps常用工具。D平臺(tái)的DevOps工具中包含了項(xiàng)目管理平臺(tái)JIRA、開發(fā)工具GIT、持續(xù)集成與測(cè)試、持續(xù)交付與部署、持續(xù)監(jiān)控與運(yùn)維這幾個(gè)部分。
2.1? 項(xiàng)目管理
JIRA[5]是基于JAVA開發(fā)的項(xiàng)目缺陷跟蹤管理平臺(tái),由Atlassian公司開發(fā),JIRA在項(xiàng)目管理系統(tǒng)中功能和穩(wěn)定性一向比較出色,而且易用性也比較好。同時(shí)用戶購買JIRA系統(tǒng)的同時(shí),也獲得了其源代碼,可以做二次開發(fā)。JIRA功能強(qiáng)大,界面簡(jiǎn)潔,配置靈活,可擴(kuò)展性強(qiáng)。
2.2? 開發(fā)工具
GIT是一套分布式代碼管理系統(tǒng),可以高效的處理代碼版本問題。主要特性表現(xiàn)為遠(yuǎn)程分支和本地分支的結(jié)合使用來解決多功能并行開發(fā)的需求。
2.3? 持續(xù)集成與測(cè)試
Maven[6]是管理開發(fā)代碼間依賴的利器。Maven對(duì)開發(fā)人員提供了一套完整的生命周期框架。Maven可以集成所有開發(fā)過程,包括編譯、打包、測(cè)試、發(fā)布、歸檔等操作。Maven的原則是約定大于配置,可以讓開發(fā)、測(cè)試、運(yùn)維人員專注于崗位工作,而不用浪費(fèi)時(shí)間在各節(jié)點(diǎn)銜接的約定配置上面。
CsperJS:CsperJS[7]是基于PhantomJS編寫的腳本處理和測(cè)試工具,提供了完成常見場(chǎng)景的測(cè)試方法。D平臺(tái)使用CasperJS編寫平臺(tái)測(cè)試案例,并與JENKINS集成形成自動(dòng)化測(cè)試體系。
Jenkins: Jenkins[8]是基于JAVA開發(fā)的持續(xù)集成平臺(tái),并且已開源,用于解決重復(fù)的工作,比如編譯、冒煙測(cè)試、發(fā)布等操作。Jenkins擴(kuò)展性極強(qiáng),可以與大部分框架集成,包括Maven, kubernetes, CsperJS等,在大多數(shù)企業(yè)中被廣泛使用。
2.4? 持續(xù)交付與部署
kubernetes,簡(jiǎn)稱K8s,是用8代替8個(gè)字符“ubernete”而成的縮寫。是一個(gè)開源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效(powerful),Kubernetes提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。
傳統(tǒng)的應(yīng)用部署方式是通過插件或腳本來安裝應(yīng)用。這樣做的缺點(diǎn)是應(yīng)用的運(yùn)行、配置、管理、所有生存周期將與當(dāng)前操作系統(tǒng)綁定,這樣做并不利于應(yīng)用的升級(jí)更新/回滾等操作,當(dāng)然也可以通過創(chuàng)建虛擬機(jī)的方式來實(shí)現(xiàn)某些功能,但是虛擬機(jī)非常重,并不利于可移植性。
新的方式是通過部署容器方式實(shí)現(xiàn),每個(gè)容器之間互相隔離,每個(gè)容器有自己的文件系統(tǒng),容器之間進(jìn)程不會(huì)相互影響,能區(qū)分計(jì)算資源。相對(duì)于虛擬機(jī),容器能快速部署,由于容器與底層設(shè)施、機(jī)器文件系統(tǒng)解耦的,所以它能在不同云、不同版本操作系統(tǒng)間進(jìn)行遷移。
容器占用資源少、部署快,每個(gè)應(yīng)用可以被打包成一個(gè)容器鏡像,每個(gè)應(yīng)用與容器間成一對(duì)一關(guān)系也使容器有更大優(yōu)勢(shì),使用容器可以在build或release 的階段,為應(yīng)用創(chuàng)建容器鏡像,因?yàn)槊總€(gè)應(yīng)用不需要與其余的應(yīng)用堆棧組合,也不依賴于生產(chǎn)環(huán)境基礎(chǔ)結(jié)構(gòu),這使得從研發(fā)到測(cè)試、生產(chǎn)能提供一致環(huán)境[9]。類似地,容器比虛機(jī)輕量、更“透明”,這更便于監(jiān)控和管理。圖4為kubernetes架構(gòu)。
2.5? 持續(xù)監(jiān)控與運(yùn)維
Zabbix[10]:Zabbix是基于WEB界面提供分布式系統(tǒng)及網(wǎng)絡(luò)監(jiān)視功能的開源框架。
3? DevOps實(shí)例
D運(yùn)維自動(dòng)化管理平臺(tái)DevOps開發(fā)實(shí)例。
3.1? 制定計(jì)劃
由業(yè)務(wù)產(chǎn)品人員制定D平臺(tái)本年度的b需求點(diǎn)并添加至JIRA平臺(tái)。項(xiàng)目管理人員在計(jì)劃階段確定大概的需求及完成時(shí)間,在JIRA平臺(tái)中確定Sprint。每個(gè)項(xiàng)目團(tuán)隊(duì)的成員在Sprint下建立相應(yīng)的工作任務(wù),使JIRA平臺(tái)sprint狀態(tài)中任務(wù)情況一目了然。項(xiàng)目管理人員跟蹤Sprint及Sprint下任務(wù)的分配情況。