本人華爲工作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 | 多臺 |
筆者一接觸就欲罷不能:)
解決問題: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 | 版本最終的位置 | 多臺 |
解決問題:FTP服務器
四、開發團隊工作流程
1、每天隨時合入代碼,合入自己新建的分支進行構建,版本生成後從FTP取得版本進行驗證,驗證功能OK合入主幹庫。
2、每天凌晨自動編譯生成每日版本,共第二天一早驗證,構建問題是TOP1,每次構建失敗要當成一次事故處理,避免代碼腐爛過快。
3、構建系統維護人員除了要保證系統穩定性,即系統出現問題時候的快速響應,還要在添加構建系統功能時進行手動驗證構建流程,可以在M服務器上啓動任務。
4、工具組開發了定時流程,可以手工配置工作流,在人機界面上取代了U系統的定時器配置,開發人員可以配置自己分支的定時器和版本形態。
總體架構請參考:
http://blog.csdn.net/lee790608/article/details/51559970
本人QQ 280775561,微信JohnLee790608,有同路人可以一起探討。