什麼是持續集成?Continuous Integration, CIcss
它是一種軟件項目管理方法,依據資產庫(源碼,類庫等)的變動自動完成編譯、測試、部署和反饋。html
在沒有CI的狀況,開發人員進行開發,測試人員測試,最後支持人員進行部署和代碼的發佈。java
這是一種線性的開發流程,一旦測試通不過,可能最後就沒辦法交付產品。程序員
有句話說得對,目前軟件開發最大的難度在於:數據庫
1 肯定軟件的需求apache
2 肯定軟件的剩餘量服務器
沒法肯定軟件的需求,是由於需求隨着開發的落實在不斷的變化。最開始用戶不知道本身想要什麼,你給了他一種方案,他便在這種方案基礎上想象更多,因而不管提交什麼產品,都不會是用戶最終想要的。eclipse
沒法肯定軟件的剩餘量,是由於咱們沒法像造汽車同樣,看到整個開發過程。也許生於的20%工做,要花費80%的時間。maven
持續集成採用」水滴石穿、分而治之「的思想,既然咱們不能立刻交付一個可用的產品,爲何不隨時提供一個可使用的產品呢。工具
經過上面的結構圖,就能夠看到CI持續集成的基本思想。
就是程序員在向版本庫中提交代碼後,CI持續集成服務器自動發現或者定時發現變動,依據這些源碼,從新構建產品的編譯、測試、審查、部署和反饋過程。
根據上面的思想,持續集成工具須要作到下面幾個功能:
1 自動構建:要求無人值守,若是人工來操做,那就沒有持續集成的必要了。
2 發現版本庫的變動:經過輪詢或者定時,或者程序員使用命令,處罰持續集成發現版本庫的變動
3 反饋機制:在出現問題時,能及時的把問題反饋給正確的人(提交者、測試者、管理者)
4 回滾:在出現問題後,擁有回滾到可交付的能力。
5 純淨的構建環境:每一次都應該把以前的環境刪除乾淨,讓每一次構建都是一個新的構建。
6 完善的集成功能:代碼的測試,審查都應該作到完善。若是單純的利用它作持續的編譯,那就是大材小用了。
利用什麼工具都是其次的,關鍵是要注意養成持續集成的習慣,軟件的開發流程以及代碼的編寫,都應該注意CI的風格。
好比編寫具備單元測試的代碼,命名符合代碼審查的規範等等。
另外在持續集成的時候,還須要注意:
1 爲了不每次過多出現問題的構建,開發者在提交代碼的時候,最好在本地獨立的構建一次。能夠自行運行構建腳本,模擬構建。
2 因爲數據庫與編碼的分離,最好把數據庫相關的DDL\DML等腳本一塊兒放入版本庫中,這樣CI進行構建的時候,能夠連同數據庫一塊兒從新構建。
【1】《持續集成:軟件質量改進和風險下降之道》
【2】持續集成:http://www.martinfowler.com/articles/continuousIntegration.html
【3】CI持續集成工具:
Apache Continuum: http://continuum.apache.org/
CruiseControl: http://cruisecontrol.sourceforge.net/
Hudson: http://hudson-ci.org/
Jekins: http://jenkins-ci.org/
Luntbuild: http://jenkins-ci.org/
【4】構建腳本:
Ant: http://ant.apache.org/
Maven: http://maven.apache.org/
【5】測試:
JUinit
DbUnit
Floyd
HtmlUnit
JWebUnit
SQLUnit
【6】自動化審查:
CheckStyle: http://sourceforge.net/projects/eclipse-cs/files/
JavaNCSS: http://mojo.codehaus.org/javancss-maven-plugin/
JDepend: http://www.clarkware.com/software/JDepend.html
PMD: http://pmd.sourceforge.net/
Siminan: http://www.redhillconsulting.com.au/products/simian/
【7】反饋
Jabber: http://www.jabber.org/