【軟件工程】持續集成:如何建立百萬行級代碼的版本構建系統(二)架構拓展

本人華爲工作6年,做過開發、維護、一線支撐等大量技術工作。

因爲加班吃不消進入中軟,目前爲高級項目經理,主導CI(持續集成)方向,中軟應該是職業生涯的中間一站。

本文主要涉及多個項目組間同步、版本配套、編譯、打包的自動化,持續集成包括驗證、部署、發佈的自動化,筆者接觸較少,不獻醜了。

========================================================================================================

上一篇遺留了大量問題,下面針對一些問題展開,包括:

構建系統的前臺頁面,可以由所有的開發用戶訪問,啓動編譯、打包、代碼檢查等流程。
構建系統需要多種啓動方式,除了個人選擇版本分支進行驗證外,凌晨的版本是一天工作的集合,一定要定時器來觸發。

SVN更新代碼需要同步時,對網絡帶寬佔用較大,可以使用一臺服務器先下到局域網,之後使用同步工具拷貝到A。

FTP、HTTP server搭建。

一、版本文件同步

編譯製作軟件的文件分佈在SVN和GIT服務器上,SVN更新需要大量數據傳輸,而GIT庫只是在第一次clone時時間較長。因此SVN庫代碼需要考慮同步問題,GIT庫全部使用A服務器同步即可。(開始設計時選擇SVN,經過將近2年的演進,代碼正逐步切換到GIT)

爲了解決SVN佔用網絡帶寬較大、時間過長的問題,設計一個本地服務器L,在SVN存在更新時將代碼下載到本地,共享給其它執行服務器A。

互傳在Windows下可以使用robocopy工具,在Linux下使用rsync。

現在,服務器的類型爲:

服務器名稱 服務器功能說明 臺數

M 控制任務執行 1
C 監控網絡、服務器等狀態 1
A 執行編譯、代碼靜態檢查、打包任務 多臺
L 同步SVN到本地,共享給所有A 多臺
注:系統採用Python開發,Python作爲新興語言目前獲得華爲大力推廣,在架構、後臺腳本、應用等大量使用。

筆者一接觸就欲罷不能:)

解決問題:SVN更新代碼需要同步時,對網絡帶寬佔用較大,可以使用一臺服務器先下到局域網,之後使用同步工具拷貝到A。

二、構建系統的前臺

截止目前,系統還是在M服務器上面使用命令行啓動構建,需要增加web端訪問,也需要部分任務例如凌晨製作的每日版本定時啓動。

前臺使用Python的Django搭建系統,頁面由固定的工具項目組負責開發交互界面,根據交互配置發送任務給M啓動構建。注意工具組還提供其他系統包括驗證、部署、發佈的交互界面。

到這裏不得不介紹一下華爲自主研發的一款軟件,代稱U。U軟件分佈在M、C、A服務器上提供基本的任務啓動、監控、定時等功能,可以使用xml文件配置工程選項。

另外如果自己搭建,可以選擇一些開源系統,例如下面鏈接介紹了幾種:

http://cloud.51cto.com/art/201508/487605.htm

定時功能就不需要再開發了,直接在配置中增加定時項目即可。

再增加一臺服務器跑前臺:

H web界面啓動任務 1

解決問題:

構建系統的前臺頁面,可以由所有的開發用戶訪問,啓動編譯、打包、代碼檢查等流程。
構建系統需要多種啓動方式,除了個人選擇版本分支進行驗證外,凌晨的版本是一天工作的集合,一定要定時器來觸發。

HTTP服務器

三、保存版本的專用服務器

構建完成後,軟件版本要保存在某個特定位置,方便訪問或者發佈給後續流程。

筆者接觸的某產品,編譯後包括中間件總共將近50G,發佈包也將近10G(多個產品綁定)。每天這樣的版本要構建出超過20個,還不包括各個子系統的日誌,系統要求保存一週內的版本。

需要多個專用的服務器來保存版本,因此工作流程最終的保存地點也完整了,最終將某些服務器設置爲FTP,簡稱F。

最終,整個構建系統演進成:

M 控制任務執行 1
C 監控網絡、服務器等狀態 1
A 執行編譯、代碼靜態檢查、打包任務 多臺
L 同步SVN到本地,共享給所有A 多臺
H web界面啓動任務 1
F 版本最終的位置 多臺
在F中,增加一個FTP服務器,目前選擇了serv-U。

解決問題:FTP服務器

四、開發團隊工作流程

1、每天隨時合入代碼,合入自己新建的分支進行構建,版本生成後從FTP取得版本進行驗證,驗證功能OK合入主幹庫。

2、每天凌晨自動編譯生成每日版本,共第二天一早驗證,構建問題是TOP1,每次構建失敗要當成一次事故處理,避免代碼腐爛過快。

3、構建系統維護人員除了要保證系統穩定性,即系統出現問題時候的快速響應,還要在添加構建系統功能時進行手動驗證構建流程,可以在M服務器上啓動任務。

4、工具組開發了定時流程,可以手工配置工作流,在人機界面上取代了U系統的定時器配置,開發人員可以配置自己分支的定時器和版本形態。

總體架構請參考:

http://blog.csdn.net/lee790608/article/details/51559970

本人QQ 280775561,微信JohnLee790608,有同路人可以一起探討。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章