大家好,我是來自工行軟件開發(fā)中心的龐良,今天和大家交流的題目是在持續(xù)交付領(lǐng)域的建設(shè)分享。
今天分享的議題分四個方面:首先介紹一下我們在相關(guān)系統(tǒng)的建設(shè)的歷程,其次介紹我們在工具鏈方面的建設(shè)的實踐;然后介紹一下我們?nèi)绾瓮苿覦evOps的變革。最后說明一下我們的整體目標(biāo)。
第一個議題。工行這個版本體量相對是比較大的,所以我們的版本節(jié)奏也分三個類型。首先是季度版本,按每個季度開發(fā)測試投產(chǎn),包括應(yīng)用,主要是銀行的核心業(yè)務(wù)系統(tǒng),還有我們的Z/OS主機(jī)核心應(yīng)用。第二個就是月度版本,這部分主要是針對直接發(fā)布的應(yīng)用,開放平臺分布式系統(tǒng),還有上云的應(yīng)用。最后一個是靈活投產(chǎn)的模式,主要是針對快速原型法,以及敏捷迭代這些發(fā)展的應(yīng)用和開發(fā)。
為了支持這些不同節(jié)奏的版本發(fā)布的功能我們也開發(fā)了很多系統(tǒng)。在2008年我們開始自主題版本管理系統(tǒng),后續(xù)逐漸研發(fā)和開放平臺的版本開放系統(tǒng),在2012年引進(jìn)了CC代碼管理工具,2013年開始做持續(xù)集成的研究。2014年我們建立了內(nèi)部的智能運維平臺,2015年開發(fā)了一套版本投產(chǎn)一體化、支持自動化部署的系統(tǒng),在2015年完成了平臺化以及DOCKER版本管理的功能,2016年探索DevOps在我們行應(yīng)用的場景,2017年是掃描持續(xù)交付系統(tǒng)。2018年我們開始了持續(xù)交付的建設(shè),并且完成了投產(chǎn)的運行,實現(xiàn)了上云以及傳統(tǒng)版本的納入流水線投產(chǎn)的功能,另外我們也開始引入了業(yè)界DevOps的評估,跟業(yè)界做了一些對標(biāo)。
第二部分,關(guān)于工具鏈建設(shè)的實踐。首先是源代碼的分支管理的模式。我們的分支管理模型分為兩個,首先是傳統(tǒng)的月度版本的分支模型,主要針對并行版本比較多的場景。另外就是靈活閱讀版本分支模型,主要是針對靈活投產(chǎn)的應(yīng)用。這兩種模式是并存的,傳統(tǒng)的版本分支模型復(fù)雜度比較低,但是不夠靈活。月度傳統(tǒng)模式中我們需要配置特定的配置管理員,一旦月度分支版本建立起來,就需要專門的配置管理員管理這個分支,到交付的時間點,這個分支的所有內(nèi)容基本上要全量做一個交付投產(chǎn)。如果有一些分支沒有完成,或者有問題的話,要單獨的做一些特殊處理,所以這個月度模式是計劃性比較強(qiáng)的模式。第二個就是靈活的特性分支模型,我們不需要配專門的管理員,由開發(fā)人員自己管理,開發(fā)完以后直接提到測試分支,測試以后再提交到交付分支,如果測試不通過是不允許提交到交付分支的,所以這個交付分支相對來說是比較干凈的,所以在交付的時候直接把分支交付出去就可以了。
下面介紹一下我們對原數(shù)據(jù)以及數(shù)據(jù)庫版本管理的方式。以前工行就是以大型機(jī)主機(jī)為主,所以我們的整體架構(gòu)是相對比較集中的,我們開發(fā)的語言基本都是用COBOL,數(shù)據(jù)基本上是用DB2,有五千多張表,效率可以接受,按單個程序、單個表的力度來管理。到了分布式的時代,分布式時代效率嚴(yán)重受阻,引進(jìn)開源的產(chǎn)品做了XML方式管理DDL,引入開源,通過持續(xù)交付流水線,自動構(gòu)建、部署、測試、交付,構(gòu)建時,自動生成數(shù)據(jù)結(jié)構(gòu)回寫SEAS、審批不通過不能交付,總體原則是不能因為審批耽誤了效率。
下面介紹一下我們的構(gòu)建和構(gòu)建云。構(gòu)建包括了很多內(nèi)容,有源代碼到目標(biāo)的轉(zhuǎn)換,數(shù)據(jù)結(jié)構(gòu)到DDL的轉(zhuǎn)換,配置文件到配置中心K—V的轉(zhuǎn)換。構(gòu)建是一種依賴管理,MAVEN命令規(guī)范化BURDXML掃描,寫入制品庫,標(biāo)識關(guān)聯(lián)。構(gòu)建是統(tǒng)一的入口,應(yīng)用服務(wù)節(jié)點模型入口,版本目錄標(biāo)準(zhǔn)化入口。構(gòu)建是一種管控,引入黑名單開源JAR包,禁止構(gòu)建;代碼掃描不合規(guī),禁止構(gòu)建。原來構(gòu)建分三層結(jié)構(gòu),改造成最新的微服務(wù)架構(gòu),把所有構(gòu)建的模塊進(jìn)行了服務(wù)化的改造,另外把所有部署的時候構(gòu)建的部署模式改成了容器化,通過容器化方便地進(jìn)行擴(kuò)充容。
下面介紹一下我們的持續(xù)集成。這也是采用了業(yè)界比較典型的流程,包括獲取源代碼和案例、自動化,編譯部署,自動化測試,報警通知,獲取郵件資源,自動化檢查等等,也是采用Jenkins的流程。
下面介紹一下自動部署,這是我們自研的一個核心產(chǎn)品,采用的是WAS—SLAVE、Agent架構(gòu),三中心部署,三中心互通,分行、海外連接到數(shù)據(jù)中心進(jìn)行操作。自動化部署工具也是跟制品庫和容器鏡像聯(lián)動,實現(xiàn)版本預(yù)下載,豐富的標(biāo)準(zhǔn)租件,開發(fā)團(tuán)隊可定制部署策略,香港服務(wù)器,比如投產(chǎn)前的備份,投產(chǎn)后的策略定制,還有投產(chǎn)失敗以后有一些恢復(fù)的操作。部署工具是支持每個應(yīng)用根據(jù)它自己的特色編寫自己的一些投產(chǎn)的策略,比如傳輸?shù)囊?guī)則、要執(zhí)行的腳本,都可以在這個平臺里面做一些可視化的拖拽。