介紹服務器
持續集成是一種軟件開發實踐。開發人員頻繁地集成各自的工做,通常至少一天一次。eclipse
每次的集成都被自動構建,測試,發現其中的問題。這樣,能夠迅速的解決開發過程當中的不少問題,而不是等到軟件開發完成以後。而軟件的質量,能夠在很大程度上由一次次的自動化測試獲得保障。maven
下面介紹如下本人團隊中目前的持續集成實現。svn
持續集成,首要的就是選擇持續集成服務器。測試
目前比較成熟的持續集成服務器不少,例如CruiseControl,Continuum,Luntbuild… ui
我這邊採用的是Jenkins(An extendable open source continuous integration server)spa
除了CI Server 外,咱們還用到了svn,maven,ant,jira,fisheye。插件
下面詳細介紹一下咱們項目的實施狀況。code
大體狀況:server
源碼管理方式
主幹
分支1
測試分支
開發分支
分支2
測試分支
開發分支
項目有個主幹。新需求開分支進行開發。允許並行需求開發。(多分枝狀況)
開發分支須要創建持續集成任務,按天集成;
測試分支在完成總體開發,或者大里程碑開發後集成測試。
分支測試完成後,須要同步回主幹。同步回主幹前又須要先同步主幹的更新
項目狀況:1)須要出基礎包+增量包。且增量包的文件須要覈對。
2)須要出先後臺包,先後臺包文件有所不一樣
3) 須要處理升級腳本
故決定採用ant 來控制打包流程,調用maven執行項目的編譯,測試工做。
開發
Jira 與 eclipse 集成。每次開發任務都關聯Jira任務(bug/改進/…)。
開發人員發起code review 請求。 Review人員每次均可以在jira上找到任務對應的文件內容修改。
自動化測試
Jenkins天天跑構造任務,自動測試,生成測試報告。分發問題給各開發人員。(email/jira)
開發分支天天打包編譯/發佈/自動化測試,checkstyle
測試分支階段性打包
部署環境/配置文件
部署環境涉及 SIT,UAT,生成. 軟硬件部署形式都有點不一樣。Ant部署腳本+項目配置文件
具體流程:
1. 任務創建階段
2. 開發階段
2.1 開發環境:
採用Eclipse集成Jira 插件的形式,把開發與Jira任務更緊密結合起來。
(Mylyn + atlassianConnector 本文不作具體介紹)
當開發人員開始某個任務時,首先激活該任務。以後所作的全部修改,都會自動關聯到該任務。
當開發完成時,提交代碼,在Svn message 中加入Jira 任務ID(其實插件會自動加入該信息,開發人員不刪除便可).
這樣,當在Jira 上查看問題時,就能夠查看到svn log(Jira須要安裝svn plugin)。
任務及對應的代碼自動關聯。若有須要, reviewer 能夠很方便的查看代碼。
2.2 持續集成:
2.2.1 配置自動集成全部資源 (Jenkins 源碼管理)
每次新的任務下來都會創建對應的開發分支。
1.2.2 按照國際慣例,開發最少1天集成1次。設定天天6點自動打包
1.2.3 執行具體的構建工做
構建工做很簡單。
因爲項目文件目錄遵循了maven規範,跑check style,unit test 等只須要執行 maven site 任務就好了。
Maven 測試結束後,跑了個後續的部署腳本,把測試報告文件發佈到內部的應用服務器。
其實一開始還有計劃是把測試報告的內容按咱們自定的負責人規則自動發佈的jira上,但後來卻不了了之。
感受這個想法,,,仍是不錯的。
其實Jenkins的配置仍是很簡單,清晰的。
大多數任務都僅需配置個一下資源,Jenkins要跑的任務(例如maven腳本,或者ant腳本…),任務之間的先後關係。
3. 測試(SIT,UAT,…)
測試環節因部署環境的不一樣,涉及到增量包,升級腳本及配置文件修改。
這些都主要是在ant腳本中完成。所以實現效果就是先執行maven編譯,以後ant在maven編譯結果的基礎上,處理各類具體需求。在遇到這種特別需求時,ant仍是很給力的。不過ant腳本寫複雜以後,因爲整個腳本是流程化的,測試起來仍是很麻煩的。所以ant腳本的傳參,變量定義,調用方式都是值得慢慢斟酌的。
拋開ant腳本,總體Jenkins任務倒是依舊簡單,清晰。
4. 交付