持續集成(Continuous integration),簡稱CI。
隨着軟件項目複雜度的增加,就會對集成和確保軟件組件能夠在一起工作提出了更多的要求-要早集成、常集成。
CI不是一項軟件開發實踐,而是多項軟件開發實踐的集合。
2.持續繼承與敏捷編程
在敏捷領域中,測試驅動TDD和持續集成CI被稱爲敏捷編程XP的兩大基石,於是乎,很多人的概念裏就是持續集成是爲了實現敏捷編程的。
這是一個錯誤的認識。實際上,早於敏捷編程概念的提出,持續集成作爲一個best practice就已經被很多公司採用了,只不過作爲一個概念,
則是由Martin大叔爲了推進敏捷所倡導並由此風靡起來。持續集成本身只是一種practice,並不被什麼開發模型所限制,在任何一種開發模型中都可以採用,也可以運行得非常理想。
3.爲什麼要做持續集成
易於定位錯誤。也就是當你的持續集成失敗了,說明你新加的代碼或者修改的代碼引起了錯誤。
及早在項目裏取得系統級的成果。因爲代碼已經被集成起來了,所以即使整個系統還不是那麼可用,但至少你和你的團隊都已經可以看到它已經在那了。
改善對進度的控制。這點非常明顯,每天都可以看到哪些功能可以使用,哪些功能還沒有實現。。
改善客戶關係。理由同上。
更加充分地測試系統中的各個單元。這也是我們常講的Daily Build與Smoke Test相結合帶來的絕大好處。
能在更短的時間裏建造整個系統。
有助於項目的開發數據的收集。比如說,項目代碼量的變化,經常出錯的Tests,經常出錯的source code等。
與其它工具結合的持續代碼質量改進。如與CheckStyle,FindBugs等等的結合。
與測試工具或者框架結合的持續測試。如與xUnit,SilkTest, LoadRunner等等的結合。
便於Code Review。在每個build裏,我們都可以知道與前一個build之間有什麼改動,然後針對這些改動,我們就可以實施Code Review了。
便於開發流程的管理。要把一個開發的build提交給測試組作測試,測完滿意了,再提交到發佈組去發佈。
4.持續集成的架構圖
5.Jenkins
前置條件:
jdk 注意需要Java 5以及以上的版本
tomcat
Maven
配置環境變量,修改端口等。
Jenkins安裝:
下載war
部署到tomcat中
啓動tomcat
訪問:http://192.168.18.63:8080/jenkins,按步驟填寫完成部署。
- 項目名稱
- 自定義工作目錄
- 配置svn地址,用戶名,密碼
- Build periodically 0 1 * * *
- Poll SCM */5 * * * *
- Invoke top-level Maven targets mvn package
- Execute shell
- 構建後操作:FindBugs,Junit Test,Email等
自動部署執行的shell腳本:
- BUILD_ID=dontkillme 防止job完成後tomcat啓動終端,原因未知。
- sh /opt/tomcat/bin/shutdown.sh
- sleep 5
- rm -rf /opt/tomcat/webapps/cmcciw /opt/tomcat/webapps/cmcciw.war
- cp target/cmcciw.war /opt/tomcat/webapps/
- sleep 10
- sh /opt/tomcat/bin/startup.sh