某大型證券公司DevOps持續(xù)交付應(yīng)用實(shí)踐
作者介紹
張永啟、向元武、于娜娜,中泰證券股份有限公司科技研發(fā)部,本文選自《交易技術(shù)前沿》總第三十九期文章。
近些年金融科技在證券行業(yè)發(fā)揮的作用越來(lái)越重要,運(yùn)用金融科技賦能業(yè)務(wù)發(fā)展,通過(guò)個(gè)性化服務(wù)構(gòu)建護(hù)城河,將金融科技與業(yè)務(wù)創(chuàng)收和降本增效相結(jié)合開(kāi)始成為證券從業(yè)人員所關(guān)注的問(wèn)題,如何提升研發(fā)交付效率、小步快跑、快速迭代是所有證券行業(yè)科技研發(fā)團(tuán)隊(duì)共同關(guān)心的話題。敏捷為快速迭代提供了理論思想和方法指導(dǎo),DevOps為敏捷落地提供了補(bǔ)充和工具支持。
中泰證券股份有限公司科技研發(fā)部互聯(lián)網(wǎng)研發(fā)團(tuán)隊(duì)通過(guò)對(duì)DevOps相關(guān)理論和技術(shù)的研究、分析,設(shè)計(jì)并實(shí)現(xiàn)了蜂鳥(niǎo)效能管理平臺(tái)。通過(guò)蜂鳥(niǎo)效能管理平臺(tái)實(shí)現(xiàn)了編碼后續(xù)研發(fā)環(huán)節(jié)的降本增效。
DevOps是一套創(chuàng)新且有效的文化和思想,本平臺(tái)借鑒其中的持續(xù)集成、持續(xù)交付和持續(xù)運(yùn)營(yíng)的關(guān)鍵思想,并結(jié)合互聯(lián)網(wǎng)研發(fā)過(guò)程遇到的實(shí)際情況,解決了研發(fā)、測(cè)試和運(yùn)維等角色溝通協(xié)作中遇到的一系列問(wèn)題,實(shí)現(xiàn)了產(chǎn)品多環(huán)境交付、流程可視化、測(cè)試自動(dòng)化、運(yùn)維智能化、流程規(guī)范化和效能指標(biāo)可視化等功能。
蜂鳥(niǎo)效能平臺(tái)上線后的應(yīng)用實(shí)踐結(jié)果表明,通過(guò)運(yùn)用DevOps相關(guān)理論和技術(shù)能夠提升互聯(lián)網(wǎng)研發(fā)在市場(chǎng)快速變化的過(guò)程中實(shí)現(xiàn)產(chǎn)品應(yīng)用的快速迭代,從而達(dá)到減少產(chǎn)品試錯(cuò)與迭代過(guò)程中的時(shí)間成本和技術(shù)人力成本,為公司業(yè)務(wù)創(chuàng)收提供技術(shù)保障的目的。
一、背景及意義
DevOps因其先進(jìn)性和全面性,已被認(rèn)為是軟件工程的第三次革命;由PUPPET和DORA聯(lián)合發(fā)布的《2017 State of DevOps Report》報(bào)告中,故障恢復(fù)時(shí)間縮短了96倍,業(yè)務(wù)需求從提出到投產(chǎn)的周期從3個(gè)月到6個(gè)月縮短到3周甚至更短,使得企業(yè)更好適應(yīng)市場(chǎng)變化。DevOps已經(jīng)被證實(shí)能在IT和商業(yè)兩方面提升效率。
DevOps定義:DevOps(Development和Operations的組合詞)是一組過(guò)程、方法與系統(tǒng)的統(tǒng)稱(chēng),用于促進(jìn)開(kāi)發(fā)(應(yīng)用程序/軟件工程)、技術(shù)運(yùn)營(yíng)和質(zhì)量保障(QA)部門(mén)之間的溝通、協(xié)作與整合。它是一種重視“軟件開(kāi)發(fā)人員(Dev)”和“IT運(yùn)維技術(shù)人員(Ops)”之間溝通合作的文化、運(yùn)動(dòng)或慣例。
透過(guò)自動(dòng)化“軟件交付”和“架構(gòu)變更”的流程,來(lái)使得構(gòu)建、測(cè)試、發(fā)布軟件能夠更加地快捷、頻繁和可靠。它的出現(xiàn)是由于軟件行業(yè)日益清晰地認(rèn)識(shí)到:為了按時(shí)交付軟件產(chǎn)品和服務(wù),開(kāi)發(fā)和運(yùn)維工作必須緊密合作。
特別是敏捷迭代已經(jīng)成為金融行業(yè)研發(fā)團(tuán)隊(duì)的主流研發(fā)模式,這對(duì)開(kāi)發(fā)、測(cè)試、運(yùn)維提出了更高效的要求。

圖1:敏捷迭代流程
中泰證券互聯(lián)網(wǎng)研發(fā)團(tuán)隊(duì)采用敏捷研發(fā)模式進(jìn)行團(tuán)隊(duì)間的協(xié)作,敏捷的實(shí)施需要通過(guò)小迭代形式不斷的交付應(yīng)用產(chǎn)品。敏捷開(kāi)發(fā)驅(qū)動(dòng)開(kāi)發(fā)人員更快的交付代碼,新的代碼需要被更快的測(cè)試,并需要頻繁的被部署到開(kāi)發(fā)、測(cè)試和生產(chǎn),由于運(yùn)維和測(cè)試不能盡快的參與到軟件開(kāi)發(fā)生命周期,導(dǎo)致交付流水線阻塞的情況,而通過(guò)DevOps的運(yùn)用很好解決了這些問(wèn)題。
在DevOps實(shí)施的過(guò)程中,涉及的角色主要包括開(kāi)發(fā)、測(cè)試(質(zhì)量)、運(yùn)維三個(gè)角色,見(jiàn)下圖:

圖2:開(kāi)發(fā)、測(cè)試(質(zhì)量保證)、運(yùn)維
其中研發(fā)主要關(guān)注產(chǎn)品研發(fā)的高效、穩(wěn)定、快速的實(shí)現(xiàn),以及對(duì)應(yīng)的產(chǎn)品開(kāi)發(fā)完成后,交付制品對(duì)應(yīng)上線時(shí)間點(diǎn)能夠可預(yù)期;運(yùn)維則更多的關(guān)注如何通過(guò)自動(dòng)化運(yùn)維和持續(xù)監(jiān)控等工具降低產(chǎn)品上線后的維護(hù)成本;測(cè)試(質(zhì)量保障)角色則關(guān)注研發(fā)提交過(guò)來(lái)的產(chǎn)品能夠盡快的得到測(cè)試,因此在提高質(zhì)量保障效率的過(guò)程中,該角色更多的關(guān)注產(chǎn)品的持續(xù)自動(dòng)化測(cè)試,以及產(chǎn)品交付質(zhì)量的提升。
而DevOps實(shí)現(xiàn)了將研發(fā)、運(yùn)維和質(zhì)量三個(gè)角色統(tǒng)一起來(lái),實(shí)現(xiàn)了研發(fā)、運(yùn)維和質(zhì)量的一體化,同時(shí)通過(guò)持續(xù)集成和持續(xù)交付的能力,使運(yùn)維人員更早的參與到產(chǎn)品的交付過(guò)程中區(qū),減少了不同角色之間的交付壁壘。

圖3:DevOps過(guò)程
綜上所述,盡管新工具思想的推進(jìn)在一定程度上能夠提升產(chǎn)品的交付效率,但由于企業(yè)自動(dòng)化程度低、軟件開(kāi)發(fā)流程的不規(guī)范導(dǎo)致的交付效率慢、交付流程不規(guī)范、線上故障反映不及時(shí)、運(yùn)營(yíng)數(shù)據(jù)獲取困難等問(wèn)題的存在,使企業(yè)在實(shí)際的產(chǎn)品交付過(guò)程中依然不能實(shí)現(xiàn)快速交付有價(jià)值的產(chǎn)品給用戶(hù)。這就需要一個(gè)平臺(tái)解決以上問(wèn)題,但是目前市面上已有的相關(guān)產(chǎn)品存在不能和流程結(jié)合以及不支持混合制品(容器和非容器)的持續(xù)集成與持續(xù)交付,且不能獲取實(shí)際場(chǎng)景的業(yè)務(wù)數(shù)據(jù)。因此,一個(gè)能夠解決當(dāng)前困境的統(tǒng)一自研DevOps平臺(tái)變得尤為重要。

圖4:DevOps能力地圖與實(shí)踐落地
二、中泰證券Devops蜂鳥(niǎo)效能平臺(tái)整體功能規(guī)劃
蜂鳥(niǎo)效能平臺(tái)是一個(gè)以DevOps相關(guān)理念為指導(dǎo)思想,結(jié)合證券行業(yè)安全、合規(guī)等需求特性實(shí)現(xiàn)的一個(gè)集多環(huán)境(開(kāi)發(fā)、測(cè)試、預(yù)發(fā)布、生產(chǎn))持續(xù)集成(CI)/持續(xù)發(fā)布(CD)、代碼質(zhì)量檢測(cè)、自動(dòng)化測(cè)試、上線流程審批、研發(fā)效能數(shù)據(jù)跟蹤及報(bào)表統(tǒng)計(jì)的綜合效能管理平臺(tái)。通過(guò)蜂鳥(niǎo)效能平臺(tái)在互聯(lián)網(wǎng)研發(fā)過(guò)程中的應(yīng)用,提升了互聯(lián)網(wǎng)研發(fā)在市場(chǎng)快速變化的過(guò)程中實(shí)現(xiàn)產(chǎn)品應(yīng)用的快速迭代,從而達(dá)到減少產(chǎn)品試錯(cuò)與迭代過(guò)程中的時(shí)間成本和技術(shù)人力成本,并為公司業(yè)務(wù)創(chuàng)收提供技術(shù)了保障的目標(biāo)。
依托DevOps相關(guān)理念,結(jié)合當(dāng)前互聯(lián)網(wǎng)技術(shù)中最前沿的容器化技術(shù)、容器編排管理kubernetes、微服務(wù)架構(gòu)、配置中心、分布式消息存儲(chǔ)隊(duì)列、靜態(tài)代碼掃描和自動(dòng)化測(cè)試等技術(shù),蜂鳥(niǎo)效能平臺(tái)實(shí)現(xiàn)了具有持續(xù)集成、持續(xù)交付和持續(xù)運(yùn)營(yíng)能力的統(tǒng)一綜合效能管理平臺(tái),各階段詳細(xì)技術(shù)如下圖:

圖5:蜂鳥(niǎo)效能平臺(tái)規(guī)劃
蜂鳥(niǎo)效能平臺(tái)整體技術(shù)架構(gòu)劃分為三層,最底層為基礎(chǔ)設(shè)施層,該層主要為各混合云環(huán)境下的基礎(chǔ)環(huán)境,如 私有云、華為云和行業(yè)云等環(huán)境下的開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境,建立在基礎(chǔ)層之上搭建了支撐平臺(tái)的工具,形成了平臺(tái)的工具層,如需求管理jira、代碼管理Git、容器管理k8s和監(jiān)控工具等,通過(guò)工具層提供的能力,建立并實(shí)現(xiàn)了價(jià)值流層,價(jià)值流層對(duì)應(yīng)的功能直接為對(duì)應(yīng)的職能化人員賦能,主要為持續(xù)集成、持續(xù)交付和持續(xù)運(yùn)營(yíng)。
三、蜂鳥(niǎo)效能平臺(tái)相關(guān)技術(shù)節(jié)點(diǎn)簡(jiǎn)介
為了將具體需求與迭代上線進(jìn)行對(duì)應(yīng),從而達(dá)到系統(tǒng)上線需求可追蹤,同時(shí)也為后續(xù)對(duì)需求進(jìn)行價(jià)值分析提供基礎(chǔ)數(shù)據(jù),因此需要將項(xiàng)目管理平臺(tái)JIRA與蜂鳥(niǎo)效能平臺(tái)持續(xù)交付進(jìn)行打通。研發(fā)人員在蜂鳥(niǎo)效能平臺(tái)進(jìn)行提測(cè)和發(fā)布上線時(shí)可以根據(jù)提示選擇對(duì)應(yīng)的STORY,從而完成提測(cè)、上線與JIRA項(xiàng)目的關(guān)聯(lián)打通。
蜂鳥(niǎo)效能平臺(tái)CI/CD功能主要包括靜態(tài)代碼掃描、開(kāi)發(fā)環(huán)境CI/CD、測(cè)試環(huán)境CI/CD和自動(dòng)化測(cè)試、上線流程審批、生產(chǎn)環(huán)境CI/CD、交付制品的環(huán)境流轉(zhuǎn)等功能。其中應(yīng)用產(chǎn)品的制品在各環(huán)境中詳細(xì)流轉(zhuǎn)邏輯圖如下:

?圖6:CI/CD流程
從上圖可知,制品在多環(huán)境CI/CD流轉(zhuǎn)的過(guò)程中,主要包括三個(gè)環(huán)境的流轉(zhuǎn),分別為開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境和生產(chǎn)環(huán)境,其中開(kāi)發(fā)環(huán)境采用自動(dòng)構(gòu)建、自動(dòng)集成和自動(dòng)部署的方案,測(cè)試環(huán)境的流轉(zhuǎn)與發(fā)布根據(jù)技術(shù)經(jīng)理在蜂鳥(niǎo)效能平臺(tái)上的提測(cè),測(cè)試組人員可以根據(jù)自身需要進(jìn)行按需自動(dòng)化發(fā)布部署,發(fā)布部署完成后,可以對(duì)相應(yīng)的功能模塊進(jìn)行自動(dòng)化測(cè)試。制品在生產(chǎn)環(huán)境的流轉(zhuǎn)與發(fā)布方式和測(cè)試環(huán)境的發(fā)布部署方式類(lèi)似,在蜂鳥(niǎo)效能平臺(tái)上走完審批流程后根據(jù)實(shí)際需要,運(yùn)維人員按需自動(dòng)化發(fā)布部署。蜂鳥(niǎo)效能平臺(tái)實(shí)現(xiàn)了線上審批流程和測(cè)試、發(fā)布操作的關(guān)聯(lián)控制,保證每次提測(cè)和發(fā)布上線都有嚴(yán)格的流程把控。
其中對(duì)于容器化應(yīng)用各環(huán)境流轉(zhuǎn)發(fā)布部署細(xì)節(jié)如下:
1)開(kāi)發(fā)環(huán)境鏡像生成與發(fā)布:
在Gitlab上創(chuàng)建工程后,研發(fā)人員可以自助在平臺(tái)上對(duì)該Gitlab工程綁定自動(dòng)構(gòu)建和部署模塊,當(dāng)該工程主分支發(fā)生branch合并時(shí)觸發(fā)自動(dòng)構(gòu)建,鏡像創(chuàng)建后,會(huì)將對(duì)應(yīng)的鏡像推送到鏡像倉(cāng)庫(kù),然后再觸發(fā)自動(dòng)化部署腳本將該鏡像自動(dòng)部署到開(kāi)發(fā)環(huán)境。
2)測(cè)試環(huán)境下的鏡像流轉(zhuǎn)與發(fā)布:
在開(kāi)發(fā)人員將對(duì)應(yīng)的需求開(kāi)發(fā)完后,在蜂鳥(niǎo)效能平臺(tái)上進(jìn)行應(yīng)用產(chǎn)品提測(cè),提測(cè)后測(cè)試組能夠在蜂鳥(niǎo)效能平臺(tái)上的測(cè)試模塊看到提測(cè)的具體鏡像內(nèi)容,根據(jù)提測(cè)詳情,可以實(shí)現(xiàn)一鍵自動(dòng)部署,然后再對(duì)測(cè)試環(huán)境的鏡像進(jìn)行自動(dòng)化功能、接口、性能和UI測(cè)試。
3)生產(chǎn)環(huán)境下的鏡像流轉(zhuǎn)與發(fā)布:
在走完產(chǎn)品上線流程審批后,運(yùn)維人員能夠在蜂鳥(niǎo)效能平臺(tái)上看到具體的上線流程信息,根據(jù)實(shí)際情況進(jìn)行自動(dòng)化發(fā)布部署、回滾和復(fù)核。
通過(guò)CI/CD流水線,使產(chǎn)品、UED、研發(fā)、測(cè)試、運(yùn)維和合規(guī)等職能化角色可以在其對(duì)應(yīng)職責(zé)的權(quán)限下完成產(chǎn)品上線過(guò)程中對(duì)應(yīng)的具體操作,如測(cè)試人員完成自動(dòng)化測(cè)試操作、運(yùn)維人員完成自動(dòng)化部署操作和合規(guī)人員完成合規(guī)審核操作等,最終達(dá)到產(chǎn)品交付的目的。同時(shí)蜂鳥(niǎo)效能平臺(tái)隔離了開(kāi)發(fā)、測(cè)試、生產(chǎn)環(huán)境,對(duì)應(yīng)的角色只能在對(duì)應(yīng)的環(huán)境進(jìn)行操作,操作環(huán)境的隔離符合《證券基金經(jīng)營(yíng)機(jī)構(gòu)信息技術(shù)管理辦法》的相關(guān)要求。
代碼的科學(xué)管理對(duì)團(tuán)隊(duì)高效協(xié)作以及流程規(guī)范具有特別重要的作用,蜂鳥(niǎo)效能平臺(tái)采用Git作為代碼管理工具。GitFlow模式是若干模式的集大成者,包含一個(gè)主干分支、一個(gè)開(kāi)發(fā)分支、許多的特性分支、許多的發(fā)布發(fā)布分支和Hotfix分支,以及許多的合并規(guī)則,通過(guò)GitFlow模式的運(yùn)用,能夠解決開(kāi)發(fā)過(guò)程中大部分代碼協(xié)作的問(wèn)題。同時(shí)通過(guò)分支的管理,也為后續(xù)開(kāi)發(fā)環(huán)境的CI/CD奠定了基礎(chǔ)。
蜂鳥(niǎo)效能平臺(tái)的制品倉(cāng)庫(kù)在持續(xù)交付的過(guò)程中扮演著中轉(zhuǎn)站的作用,如何結(jié)合制品倉(cāng)庫(kù)實(shí)現(xiàn)制品在不同環(huán)境中的流轉(zhuǎn)對(duì)保持制品交付前后的一致性與可追溯性有著重要的作用。對(duì)于當(dāng)前的制品主要分為Docker鏡像類(lèi)和非鏡像類(lèi)制品,為了能夠?qū)ocker鏡像類(lèi)進(jìn)行管理,鏡像倉(cāng)庫(kù)采用開(kāi)源Harbor進(jìn)行管理,對(duì)于非鏡像類(lèi)制品采用Artifactory進(jìn)行管理,為了能夠達(dá)到環(huán)境流轉(zhuǎn)的效果,采用基于倉(cāng)庫(kù)的不同賬號(hào)之間的權(quán)限管理方案,具體見(jiàn)關(guān)鍵模塊方案。對(duì)于唯一性問(wèn)題,容器類(lèi)制品采用鏡像id非容器類(lèi)制品采用MD5碼保證制品的唯一性。
蜂鳥(niǎo)效能平臺(tái)接口管理功能對(duì)于不同的研發(fā)角色作用不同,開(kāi)發(fā)人員能夠利用接口管理功能進(jìn)行前后端接口調(diào)用、多項(xiàng)目接口統(tǒng)一管理、接口調(diào)試和多團(tuán)隊(duì)協(xié)同開(kāi)發(fā);測(cè)試人員能夠基于接口管理功能中登記的接口進(jìn)行簡(jiǎn)單接口測(cè)試、場(chǎng)景化接口測(cè)試;運(yùn)維人員可以基于接口管理功能中登記的接口實(shí)現(xiàn)業(yè)務(wù)監(jiān)控;產(chǎn)品人員可以快速進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。
蜂鳥(niǎo)效能平臺(tái)的配置中心能夠?qū)崿F(xiàn)對(duì)不同環(huán)境、多云環(huán)境的系統(tǒng)參數(shù)配置進(jìn)行管理,同時(shí)配置中心也是多環(huán)境(開(kāi)發(fā)、測(cè)試、仿真、生產(chǎn))CI/CD的關(guān)鍵。蜂鳥(niǎo)效能平臺(tái)的配置中心基于Apollo實(shí)現(xiàn),Apollo是一個(gè)開(kāi)源的分布式配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景。配置中心實(shí)現(xiàn)了開(kāi)發(fā)、測(cè)試、生產(chǎn)多環(huán)境的系統(tǒng)參數(shù)配置功能,同時(shí)支持多云架構(gòu)下的分布式系統(tǒng)配置管理。配置中心為CI、CD的平滑交付提供了技術(shù)保障。

?圖7:分布式配置中心
7、單元測(cè)試、靜態(tài)代碼掃描及開(kāi)發(fā)環(huán)境CI/CD
單元測(cè)試能夠讓開(kāi)發(fā)人員在提測(cè)前發(fā)現(xiàn)新增變動(dòng)對(duì)系統(tǒng)可能造成的不利影響,并通過(guò)將單元測(cè)試與開(kāi)發(fā)環(huán)境CI/CD進(jìn)行結(jié)合,當(dāng)開(kāi)發(fā)人員進(jìn)行代碼提交或者進(jìn)行代碼merge時(shí)將觸發(fā)自動(dòng)單元測(cè)試并將結(jié)果反饋給對(duì)應(yīng)研發(fā)人員。
為了提高研發(fā)過(guò)程中的代碼質(zhì)量并盡快發(fā)現(xiàn)已有系統(tǒng)代碼中存在的漏洞缺陷,蜂鳥(niǎo)效能平臺(tái)提供了靜態(tài)代碼掃描功能,靜態(tài)代碼掃描功能可以對(duì)研發(fā)人員的代碼進(jìn)行分析并進(jìn)一步提升編碼規(guī)范。靜態(tài)代碼掃描功能需要能夠識(shí)別代碼中一些常見(jiàn)的漏洞,如資源類(lèi)問(wèn)題(資源釋放、無(wú)效指針等)、安全性要求(數(shù)據(jù)污染、注入等)、潛在的缺陷(數(shù)組越界、初始化、除零錯(cuò)誤、空指針引用等)、多線程和同步性(雙重鎖定、未釋放的鎖等)和異常處理(NullPointerException)等。
靜態(tài)代碼掃描平臺(tái)采用增量掃描和全面掃描相結(jié)合的方式,日常開(kāi)發(fā)對(duì)于不斷的代碼提交采用自動(dòng)增量掃描,便于快速發(fā)現(xiàn)新增代碼中的缺陷,同時(shí)結(jié)合定時(shí)全量掃描和提測(cè)前全量掃描的方式,發(fā)現(xiàn)代碼中所有的缺陷,只有當(dāng)高危、中危、低危等級(jí)的缺陷全部修復(fù)完后才能由開(kāi)發(fā)人員在蜂鳥(niǎo)效能平臺(tái)上提測(cè)版本給測(cè)試人員,提升了開(kāi)發(fā)人員提測(cè)版本的質(zhì)量和安全性。
蜂鳥(niǎo)效能平臺(tái)的自動(dòng)化測(cè)試功能實(shí)現(xiàn)了互聯(lián)網(wǎng)研發(fā)團(tuán)隊(duì)測(cè)試人員的效率飛躍,通過(guò)將自動(dòng)化測(cè)試平臺(tái)與持續(xù)交付的流程進(jìn)行結(jié)合大大提升了測(cè)試效率。在蜂鳥(niǎo)效能平臺(tái)上,測(cè)試人員能夠看到研發(fā)人員提測(cè)的具體內(nèi)容,并識(shí)別出具體的制品版本及唯一碼,測(cè)試人員可以在蜂鳥(niǎo)效能平臺(tái)上對(duì)開(kāi)發(fā)人員提測(cè)的版本進(jìn)行一鍵部署和一鍵自動(dòng)化測(cè)試,最后測(cè)試的結(jié)果將以報(bào)告的方式反饋給研發(fā)人員。
通過(guò)蜂鳥(niǎo)效能平臺(tái)的接口管理功能與自動(dòng)化測(cè)試功能的集成。目前已經(jīng)支持UI及接口自動(dòng)化測(cè)試。UI自動(dòng)化基于Appium實(shí)現(xiàn),Appium要能真正自動(dòng)化手機(jī)上的應(yīng)用必須依賴(lài)于各個(gè)移動(dòng)平臺(tái)所帶的自動(dòng)化框架;IOS平臺(tái)目前依賴(lài)于XCUITest實(shí)現(xiàn),安卓目前主要依賴(lài)于Uiautomator??蚣芴峁┑氖沁\(yùn)行庫(kù),運(yùn)行庫(kù)運(yùn)行在移動(dòng)設(shè)備上。
AppiumServer服務(wù)起來(lái)后會(huì)在移動(dòng)設(shè)備上安裝一個(gè)幫助自動(dòng)化的應(yīng)用,可理解為“控制許可”或者“代理”應(yīng)用,通過(guò)這樣應(yīng)用可以編譯我們自動(dòng)化給出的指令,然后按指令測(cè)試移動(dòng)設(shè)備上的應(yīng)用。

圖8:UI自動(dòng)化流程
蜂鳥(niǎo)效能平臺(tái)的接口自動(dòng)化功能基于接口分層測(cè)試設(shè)計(jì)的思想,采用python+unittest+ddt框架自研實(shí)現(xiàn)。把測(cè)試數(shù)據(jù)與測(cè)試代碼完全分離,將數(shù)據(jù)操作、用例配置、日志記錄、接口請(qǐng)求等公用方法封裝成單獨(dú)類(lèi),使用DDT數(shù)據(jù)驅(qū)動(dòng)工具管理每個(gè)接口的多種測(cè)試場(chǎng)景,使用unittest組織、執(zhí)行多個(gè)接口的測(cè)試用例集合,通過(guò)添加多種斷言形式,如接口的狀態(tài)碼、返回值、差異化(diff)對(duì)比等對(duì)接口測(cè)試結(jié)果進(jìn)行判斷,最后通過(guò)HtmlTestRunner生成測(cè)試報(bào)告,把返回的測(cè)試結(jié)果用圖形和文本形式形象的展現(xiàn)出來(lái)。

圖9:接口自動(dòng)化體系
接口自動(dòng)化測(cè)試功能是Devops實(shí)踐中不可或缺的一部分,具備持續(xù)測(cè)試能力,大大提升測(cè)試效率,使測(cè)試人員快速適應(yīng)敏捷開(kāi)發(fā)工作模式,從而減少了產(chǎn)品迭代過(guò)程中的時(shí)間成本和技術(shù)人力成本,為產(chǎn)品快速迭代和發(fā)布提供了質(zhì)量保障。

圖10:接口自動(dòng)化流程
在真實(shí)的部署環(huán)境中,經(jīng)常涉及多云環(huán)境下的發(fā)布管理,為了實(shí)現(xiàn)多云環(huán)境下的制品流轉(zhuǎn)及發(fā)布部署,蜂鳥(niǎo)效能平臺(tái)實(shí)現(xiàn)了一套混合云環(huán)境的發(fā)布管理功能。
中泰證券互聯(lián)網(wǎng)應(yīng)用系統(tǒng)的部署環(huán)境為一個(gè)混合云場(chǎng)景,蜂鳥(niǎo)效能平臺(tái)通過(guò)對(duì)混合云環(huán)境資源的整合,解決了混合云環(huán)境的CI/CD發(fā)布部署和系統(tǒng)監(jiān)控問(wèn)題,具體方案如下圖:

圖11:混合云多云環(huán)境部署
通過(guò)該方案與CI/CD制品流轉(zhuǎn)設(shè)計(jì)相結(jié)合,使研發(fā)人員交付的應(yīng)用制品可以通過(guò)蜂鳥(niǎo)效能平臺(tái)實(shí)現(xiàn)多環(huán)境流轉(zhuǎn),最終發(fā)布部署到混合云的環(huán)境中去。
為提升線上問(wèn)題和故障的發(fā)現(xiàn)、反饋效率,蜂鳥(niǎo)效能平臺(tái)集成了自動(dòng)化監(jiān)控功能,自動(dòng)化監(jiān)控能夠提高運(yùn)維的效率,并能夠滿(mǎn)足頻繁發(fā)布部署過(guò)程中的應(yīng)用監(jiān)控問(wèn)題,通過(guò)對(duì)應(yīng)用服務(wù)的自動(dòng)化監(jiān)控與故障自愈相結(jié)合能夠在用戶(hù)無(wú)感知的情況下修復(fù)線上故障,同時(shí)在蜂鳥(niǎo)效能平臺(tái)上對(duì)線上故障數(shù)據(jù)進(jìn)行跟蹤收集分析,達(dá)到盡快反饋給研發(fā)人員并能夠?qū)收匣厮菥哂袇⒖甲饔谩?/span>
效能指標(biāo)能夠體現(xiàn)研發(fā)過(guò)程的實(shí)施情況,客觀的效能數(shù)據(jù)可以對(duì)我們研發(fā)改進(jìn)起到指導(dǎo)效果,沒(méi)有客觀數(shù)據(jù)和成功標(biāo)準(zhǔn)就無(wú)法做到持續(xù)反饋和持續(xù)改進(jìn)。蜂鳥(niǎo)效能平臺(tái)中關(guān)鍵效能指標(biāo)見(jiàn)下圖:

圖12:效能數(shù)據(jù)
研發(fā)效能數(shù)據(jù)多維度展示產(chǎn)品交付各階段的數(shù)據(jù),如開(kāi)發(fā)階段的代碼數(shù)據(jù)統(tǒng)計(jì)、測(cè)試階段的自動(dòng)化測(cè)試數(shù)據(jù)統(tǒng)計(jì)、運(yùn)維上線后的故障數(shù)據(jù)統(tǒng)計(jì)等;其中流水線指標(biāo)從交付效率和吞吐率兩方面主要反映研發(fā)過(guò)程整體效能情況;項(xiàng)目/需求指標(biāo)能夠從需求的成本和上線后的價(jià)值兩個(gè)角度對(duì)需求進(jìn)行價(jià)值數(shù)據(jù)衡量;研發(fā)指標(biāo)反映了當(dāng)前研發(fā)人員的工作負(fù)荷以及產(chǎn)出及質(zhì)量情況;測(cè)試指標(biāo)對(duì)產(chǎn)品質(zhì)量保證具有關(guān)鍵指導(dǎo)的作用;運(yùn)維指標(biāo)能夠反映運(yùn)維工作效率的情況,如線上故障情況及功能上線發(fā)布效率。
四、DevOps蜂鳥(niǎo)效能平臺(tái)關(guān)鍵功能截圖
目前蜂鳥(niǎo)效能平臺(tái)已經(jīng)覆蓋中泰證券互聯(lián)網(wǎng)金融全部業(yè)務(wù),接入項(xiàng)目模塊180多個(gè),支持容器及非容器應(yīng)用,累計(jì)CI/CD(持續(xù)集成/持續(xù)交付)次數(shù)6萬(wàn)+。

圖13
該圖為一個(gè)完整提測(cè)、上線發(fā)布流程圖,各職能化角色都有參與到該流程中,開(kāi)發(fā)人員提測(cè)、測(cè)試人員執(zhí)行測(cè)試、技術(shù)經(jīng)理確認(rèn)上線發(fā)布、產(chǎn)品經(jīng)理發(fā)布前驗(yàn)收、產(chǎn)品及技術(shù)負(fù)責(zé)人確認(rèn)上線、合規(guī)確認(rèn)發(fā)布流程、運(yùn)維人員A執(zhí)行發(fā)布、運(yùn)維人員B復(fù)核發(fā)布、業(yè)務(wù)部門(mén)生產(chǎn)驗(yàn)收。

圖14
該圖為提測(cè)詳情圖,技術(shù)經(jīng)理可以通過(guò)該提測(cè)詳情頁(yè)完成容器或者非容器化的提測(cè)。

圖15
該圖為效能數(shù)據(jù)對(duì)研發(fā)階段的某一場(chǎng)景進(jìn)行展示。蜂鳥(niǎo)效能平臺(tái)通過(guò)多維度對(duì)不同交付階段進(jìn)行數(shù)據(jù)跟蹤并繪制全面的圖表對(duì)全過(guò)程進(jìn)行效能分析。

圖16
通過(guò)自動(dòng)化測(cè)試報(bào)告能夠詳細(xì)完整的查看具體的功能模塊測(cè)試詳情。

圖17
通過(guò)靜態(tài)代碼掃描的報(bào)告詳情,能夠查看當(dāng)前項(xiàng)目的缺陷情況,同時(shí)通過(guò)缺陷展示快速定位缺陷位置。
五、總結(jié)
中泰證券互聯(lián)網(wǎng)研發(fā)團(tuán)隊(duì)基于DevOps思想構(gòu)建的蜂鳥(niǎo)效能平臺(tái)上線以來(lái),經(jīng)過(guò)累計(jì)6萬(wàn)+次的CI/CD(持續(xù)集成/持續(xù)交付),已經(jīng)成為目前互聯(lián)網(wǎng)研發(fā)過(guò)程中不可或缺的核心研發(fā)工具平臺(tái)。帶來(lái)的價(jià)值如下:
蜂鳥(niǎo)效能平臺(tái)將開(kāi)發(fā)、測(cè)試、生產(chǎn)環(huán)境進(jìn)行了有效隔離,實(shí)現(xiàn)了各環(huán)節(jié)操作的安全可控及合規(guī)。所有的發(fā)布操作均通過(guò)蜂鳥(niǎo)效能平臺(tái)留痕并且操作綁定流程制度,做到了問(wèn)題可追溯、減少了誤操作、操作符合公司IT管理規(guī)定。? ?
蜂鳥(niǎo)效能平臺(tái)旨在縮短開(kāi)發(fā)人員完成功能代碼編寫(xiě)到生產(chǎn)發(fā)布過(guò)程中的時(shí)間消耗,提升研發(fā)交付效率。
縮短了開(kāi)發(fā)時(shí)間周期,通過(guò)靜態(tài)代碼掃描可以在10~20分鐘內(nèi)實(shí)現(xiàn)對(duì)一個(gè)應(yīng)用系統(tǒng)的代碼檢查,提升了開(kāi)發(fā)人員CodeReview的效率。每個(gè)迭代的時(shí)間縮短0.5~1天。
縮短了測(cè)試時(shí)間周期,全功能回歸測(cè)試從2~3天人工測(cè)試降低到自動(dòng)化測(cè)試6~8小時(shí)。每個(gè)迭代的時(shí)間縮短2天左右。
縮短了各環(huán)節(jié)流轉(zhuǎn)的時(shí)間,蜂鳥(niǎo)效能平臺(tái)自動(dòng)化CI/CD次數(shù)自上線以來(lái)達(dá)到幾萬(wàn)次,已經(jīng)實(shí)現(xiàn)了從開(kāi)發(fā)人員提交代碼到生產(chǎn)發(fā)布過(guò)程中的自動(dòng)化,節(jié)約了大量的人力成本。其中各環(huán)境下的發(fā)布部署改造前后具體參考圖如下:

圖18
從上圖可知,通蜂鳥(niǎo)效能平臺(tái)的實(shí)現(xiàn)與應(yīng)用,使應(yīng)用制品在開(kāi)發(fā)、測(cè)試和運(yùn)維階段的發(fā)布部署過(guò)程中,對(duì)應(yīng)的發(fā)布部署效率提升10倍以上。
靜態(tài)代碼掃描可以識(shí)別一定的代碼邏輯設(shè)計(jì)、編碼缺陷及安全漏洞,減少了程序問(wèn)題導(dǎo)致的生產(chǎn)問(wèn)題。
應(yīng)用發(fā)布過(guò)程中,應(yīng)用包在開(kāi)發(fā)、測(cè)試和生產(chǎn)的環(huán)境流轉(zhuǎn)過(guò)程中,應(yīng)用包不用重新編譯打包,實(shí)現(xiàn)了同一應(yīng)用包多環(huán)境流轉(zhuǎn),系統(tǒng)、業(yè)務(wù)配置參數(shù)通過(guò)配置中心讀取,減少了因?yàn)閼?yīng)用包變更和參數(shù)配置問(wèn)題導(dǎo)致的生產(chǎn)發(fā)布問(wèn)題。
通過(guò)容器化技術(shù)實(shí)現(xiàn)了各環(huán)境對(duì)應(yīng)用的隔離性和封裝性,減少了因?yàn)殚_(kāi)發(fā)、測(cè)試、生產(chǎn)環(huán)境的差異性導(dǎo)致的生產(chǎn)發(fā)布問(wèn)題。
- END -
?推薦閱讀? 31天拿下K8s含金量最高的CKA+CKS證書(shū)! Kubernetes 實(shí)現(xiàn)灰度和藍(lán)綠發(fā)布 Gitlab+Jenkins+k8s+Helm 的自動(dòng)化部署實(shí)踐 終于明白了 DevOps 與 SRE 的區(qū)別! 民生銀行 IT運(yùn)維故障管理 可視化案例 Nginx配置中一個(gè)不起眼字符"/"的巨大作用,失之毫厘謬以千里 Kubernetes上生產(chǎn)環(huán)境后,99%都會(huì)遇到這2個(gè)故障 K8s kubectl 常用命令總結(jié)(建議收藏) Kubernetes 的這些核心資源原理,你一定要了解 基于Nginx實(shí)現(xiàn)灰度發(fā)布與AB測(cè)試 編寫(xiě) Dockerfile 最佳實(shí)踐 12年資深運(yùn)維老司機(jī)的成長(zhǎng)感悟 搭建一套完整的企業(yè)級(jí) K8s 集群(二進(jìn)制方式)
點(diǎn)亮,服務(wù)器三年不宕機(jī)


