中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

大型復(fù)雜軟件產(chǎn)品持續(xù)集成的實踐與反思

  文 / 黃亮 王立杰

  持續(xù)集成作為一種敏捷軟件開發(fā)實踐,已經(jīng)被越來越多的開發(fā)者所接受。持續(xù)集成倡導(dǎo)開發(fā)團隊頻繁地進行系統(tǒng)集成——通常一天一次到數(shù)次,每次集成都能被自動編譯和測試驗證,從而能在最短的時間內(nèi)發(fā)現(xiàn)問題,縮短開發(fā)周期,提高軟件質(zhì)量。

  筆者面對的是具有十多年開發(fā)維護歷史的5個相互依賴產(chǎn)品,每個產(chǎn)品均超過百萬行代碼的復(fù)雜系統(tǒng)。集成本身涉及很多煩瑣的手工操作,很難實現(xiàn)過程自動化。在實施過程中,受困于軟件系統(tǒng)的歷史遺留問題,而通常市面上的持續(xù)集成工具又不能滿足系統(tǒng)的需求,讓我們不得不著手開發(fā)自己的集成系統(tǒng)。經(jīng)過近一年的持續(xù)努力,終于完成了系統(tǒng)集成的自動化,將集成頻度從數(shù)周甚至數(shù)月集成提高到日集成,大大提高了生產(chǎn)效率。

  集成的困境

  OSS系統(tǒng)是我們一個具有十多年生命歷程的復(fù)雜系統(tǒng),多年來一直處于不斷的開發(fā)和維護中,子產(chǎn)品的數(shù)目和系統(tǒng)的代碼量也隨著時間日益增長,集成的周期、發(fā)布周期也隨之逐漸增長。OSS系統(tǒng)包含有5個需要集成的產(chǎn)品:ComLIB 、DB-Com、Data Broker、DataGen、DataAgent,每個產(chǎn)品均有上百萬行源代碼和龐大的測試用例,產(chǎn)品可以單獨構(gòu)建,但運行時有相互依賴關(guān)系。OSS產(chǎn)品棧如圖1所示,上層產(chǎn)品對下層產(chǎn)品具有依賴,部分產(chǎn)品棧亦可以組成一個應(yīng)用系統(tǒng),如DataGen+CommonLib可以組成一個應(yīng)用系統(tǒng),DataBroker+ DBCom+CommonLib也可以組成一個應(yīng)用系統(tǒng)。

圖1 OSS產(chǎn)品棧

  同時,OSS的每個產(chǎn)品又包含不同的發(fā)布單元,用于運行于不同功能服務(wù)器上:Control Server、SITE、PAP、Workstation、Application Server和不同的操作系統(tǒng)環(huán)境中,產(chǎn)品在不同的服務(wù)器上安裝單元如表1所示。

表1 OSS產(chǎn)品在不同服務(wù)器上的安裝單元

  傳統(tǒng)手工集成需要完成如下事情:

  1.從代碼庫取出產(chǎn)品棧中每個產(chǎn)品需要集成的代碼;

  2.在Build server上對每個產(chǎn)品進行編譯,單元測試(每個產(chǎn)品編譯需要2~3小時,單元測試需要4~5小時);

  3.在Package server上對編譯好的產(chǎn)品進行打包(每個產(chǎn)品打包需要約1小時);

  4.在Lab中卸載舊的產(chǎn)品;

  5.在不同的服務(wù)器上(Control Server、Site、Workstation、APP Server)安裝產(chǎn)品中相應(yīng)的產(chǎn)品的相應(yīng)部件,需要按照產(chǎn)品依賴關(guān)系進行安裝 (2~3小時);

  6.檢查每個產(chǎn)品的每個部件在Lab環(huán)境中的安裝情況,確認(rèn)安裝成功;

  7.運行功能測試腳本做回歸測試(10~12小時);

  8.檢查測試結(jié)果(3小時);

  9.對系統(tǒng)進行卸載測試,檢查卸載結(jié)果 (1~2小時)。

  如果在此過程中,一旦遇到問題,則需要花費更長的時間。如此昂貴的集成代價使得OSS系統(tǒng)通常數(shù)周甚至更長的時間才艱難地進行一次集成。而自動化還要解決多產(chǎn)品、多平臺、多種安裝和運行環(huán)境、多個操作需要人工干預(yù)的難題。

  集成目標(biāo)

  持續(xù)集成需與自動化結(jié)合才能發(fā)揮其威力,為給OSS系統(tǒng)瘦身,我們設(shè)定了如下自動化持續(xù)集成目標(biāo):

  1.在集成服務(wù)器上配置cron job,每天晚上進行集成,第二天早上發(fā)布結(jié)果;

  2.在集成服務(wù)器上配置集成方案,指定所需要的產(chǎn)品棧或子棧,指定所需產(chǎn)品的版本或分支,指定需要進行卸載、安裝測試,功能測試的Lab以及Lab里的服務(wù)器

  3.只需修改少量參數(shù)配置,即可以實現(xiàn)不同的持續(xù)集成方案。

  自動化實現(xiàn)

  通過一系列自動化工具的開發(fā)和整合,我們逐步完成了多產(chǎn)品編譯、測試、安裝、卸載、功能測試等一系列步驟的自動化操作,為了縮短集成時間,我們廣泛地采用并行工作,在編譯、測試、安裝、卸載等多個環(huán)節(jié)均采用并行,最后實現(xiàn)了成熟的集成系統(tǒng)。

  1.自動化構(gòu)建+并行編譯

  首先完成5個產(chǎn)品統(tǒng)一的Daily build。對5個產(chǎn)品采用統(tǒng)一的編譯、單元測試、打包接口,利用不同的編譯服務(wù)器對5個產(chǎn)品同時進行編譯,對同一產(chǎn)品的不同編譯單元,也采用負(fù)荷分擔(dān)的方式分發(fā)到多臺服務(wù)器上進行并行編譯、并行單元測試、并行打包,并對編譯、單元測試結(jié)果進行統(tǒng)一管理。

  2.自動化監(jiān)視

  通過監(jiān)視編譯、打包、測試過程的輸出和進程狀態(tài)等對編譯、打包、測試過程進行監(jiān)控,發(fā)現(xiàn)諸如NFS錯誤或者編譯系統(tǒng)故障之類非代碼錯誤及時取消并重啟操作,確保Daily build不會因為編譯服務(wù)器等異常發(fā)生中斷。

  3.自動部署安裝

  利用腳本工具打包好的系統(tǒng)進行自動并行安裝,免除手動安裝的煩瑣操作。當(dāng)所有待安裝的產(chǎn)品都編譯、打包完畢后,利用腳本工具將集成后的系統(tǒng)并行安裝到多個Lab(每個Lab由一套不同機器的設(shè)備組成,包含Control Server、Site、WorkStation、Application Server),對于同一Lab中的不同機器亦進行并行部署,并對安裝日志進行統(tǒng)一管理。

  4.自動功能測試

  卸載、安裝操作成功后,即對選用的測試用例進行測試,測試用例經(jīng)過精心挑選,根據(jù)功能分為不同的核心單元,周一到周五只運行核心的測試用例,周末時間再運行所有的用例。用例無法在一個Lab一個晚上運行時,則將用例分布配置在多個Lab里面,并行運行。

  5.結(jié)果匯報及存檔

  定點(如早上9:00)對前一天晚上進行的所有操作進行匯報,包括不同產(chǎn)品的編譯、打包、測試,不同Lab上不同服務(wù)器的卸載、安裝結(jié)果,不同Lab上功能測試用例通過情況等信息自動以郵件的方式通知開發(fā)和測試人員,并將結(jié)果存檔方便隨時查看,對其中的關(guān)鍵數(shù)據(jù)如測試用例通過率等寫于數(shù)據(jù)庫,便于跟蹤分析。

  自動測試統(tǒng)計結(jié)果如圖2所示。

圖2 自動測試統(tǒng)計結(jié)果

  6.流程整合和協(xié)作

  流程1~2、5發(fā)生在編譯服務(wù)器群上,流程3~4發(fā)生在運行環(huán)境Lab群上,需要將1~5流程集成自動化,并且流程間需要相互協(xié)作。我們采取集中控制的方式,將1~5所需要腳本工具和配置文件集中放置,這樣便于管理和維護,其他服務(wù)器通過NFS共享訪問腳本工具和配置文件,只需要在其他服務(wù)器上配置相關(guān)的cron job,便能相互協(xié)作起來。協(xié)作流程如圖3所示。

圖3 協(xié)作流程示意圖

  回顧與反思

  經(jīng)過近一年的完善,我們的OSS系統(tǒng)終于從之前的數(shù)周才能一次手工集成,達到了每天集成,許多人工操作和檢查統(tǒng)計工作均自動化,不僅僅大大解放了Build Manager的工作,而且避免了人工差錯,提高了效率。對于像OSS這種歷史悠久的復(fù)雜系統(tǒng),持續(xù)集成是一個長期優(yōu)化、完善的實踐過程。畢竟持續(xù)集成不是一朝一夕就可以實現(xiàn)的,而應(yīng)該成為一種持之以恒的習(xí)慣。

  總之,一個完善的運行良好的持續(xù)集成,必須考慮如下問題:

  1.持續(xù)集成的頻度和粒度

  每個開發(fā)人員提交代碼更改之前,在自己的branch上需要確保編譯、單元測試通過,避免不必要的集成失敗,只有開發(fā)人員確認(rèn)的可靠代碼,才進行集成。對于小型系統(tǒng)可以做到每次提交都集成,對于像我們OSS這樣的大型系統(tǒng),可以做到每天一集成。

  2.統(tǒng)一構(gòu)建、并行構(gòu)建

  對于多產(chǎn)品的系統(tǒng),采用統(tǒng)一的構(gòu)建、打包、安裝方式有助于靈活實現(xiàn)自動化。并行構(gòu)建、并行測試、并行安裝等可以充分利用服務(wù)器物理資源縮短集成時間。

  3.協(xié)作整合

  在并行的同時,也需要采用合適的同步協(xié)作的方法,以保證系統(tǒng)正確運行。如編譯、打包、單元測試的進程在編譯服務(wù)器群上,安裝、卸載、功能測試等進程在運行系統(tǒng)的Lab服務(wù)器群上,而郵件通知則又需要將這些進程運行的結(jié)果整合起來。簡單的文件或目錄共享遠(yuǎn)程調(diào)用往往就能完成這些控制權(quán)的轉(zhuǎn)移,實現(xiàn)協(xié)作和工具整合。

  4.高性能build server

  高性能的編譯服務(wù)器服務(wù)器群也是持續(xù)集成中強有力的支撐。支持并行編譯的話將更好。

  5.完善的結(jié)果報告

  完善的結(jié)果報告能縮短開發(fā)或測試人員發(fā)現(xiàn)、解決問題的時間。完整有效的報告應(yīng)該包含軟件版本信息,本次集成中所做的修改,單元測試和回歸測試結(jié)果,卸載/安裝結(jié)果。

  6.持續(xù)集成工具

  在持續(xù)集成實踐過程中,一個完善的SCM系統(tǒng)(如ClearCase、SVN、CVS),分支并行開發(fā)的策略幾乎是必備的支撐。同時,如果在Unix或Linux環(huán)境下,亦無須迷信于專門的持續(xù)集成工具,有些時候,借助各種腳本工具與cron job完全可以滿足這些需要。

  7.自動化

  持續(xù)集成必須跟自動化結(jié)合,才能真正的發(fā)揮其威力。

it知識庫大型復(fù)雜軟件產(chǎn)品持續(xù)集成的實踐與反思,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 成人免费视频观看 | 国产精品欧美大片 | 欧美阿v| 欧美国产精品一区二区 | 一区二区三区视频 | 国产欧美一区二区三区另类精品 | 国产性网 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 91大神xh98xh系列全部 | 在线不卡视频 | 亚洲天堂中文字幕 | 在线成人www免费观看视频 | 男女视频在线观看 | 伊人久久大香线 | 99久久国产综合精品麻豆 | 国产精品激情 | 亚洲国产精品久久久久秋霞不卡 | 日韩视频在线观看一区二区 | 中文区中文字幕免费看 | 欧美性成人 | 黑人精品欧美一区二区蜜桃 | 亚洲国产精品日本 | 在线观看中文字幕 | 国产中文字幕在线观看 | 欧美精品在线播放 | 日韩精品一区二区不卡 | 在线播放中文字幕 | 免费看国产精品视频 | 久久久国产精品一区 | 亚洲欧美视频一区 | 久久国产精品视频 | 婷婷久久综合 | 天天看天天爽 | 97精品一区二区 | 中文字幕国产精品视频 | 一区二区三区免费 | 亚洲毛片在线 | 国产精品人人做人人爽 | 日本一道本视频 | 91视频三区| h视频在线免费 |