一、什麼是持續整合(continuous integration)?
這個名詞已經在軟體開發領域持續了n年,乙個比較簡單的定義如下:
持續整合(ci)
是一種實踐,可以讓團隊在持續的基礎 上收到反饋並進行改進,不必等到開發周期後期才尋找和修復缺陷。
通俗一點兒說,就是指
對於開發人員的每一次**提交,都自動地把repository中所有**check out到乙個空目錄,並且自動執行所有test case。如果成功則接受這次提交,否則告訴所有人,這是乙個失敗的revision。
更具體的解釋可以參考
martin fowler
的continuous integration
。二、持續整合的價值與成本
有句時髦的話,叫做「存在即為合理」。既然持續整合已經存在了這麼長的時間,而且沒有消失的跡象,那就是有價值的東西。那麼它的價值何在?
有人概括如下
:(1) 減小風險;(2) 減少手動過程;(3) 生成構建結果;(4) 安全感。
而持續整合的成本在於對持續整合**的維護成本和整合的時間成本。因為隨著專案進行,軟硬體環境會越來越複雜,成品**也會不斷膨脹。此時,需要團隊而修改或增加原有的測試**,以適應這些變化,同時,每次整合所需時間也會變長,這就是持續整合的成本。
某個blog中提道
:「這種整合是如此的頻繁,多少次的**commit就有多少次持續整合。前提是整合的成本很低,或者說是完全自動化的。」
三、持續整合應該自動化什麼呢?
我們要以盡可能少的成本來獲得盡可能多的價值。這就要考慮哪些自動化是必要的啦。
jez humble提到至少有六點要做到自動化
,它們分別是(1)自動化的執行測試;(2) 自動產生可部署的二進位製成品;(3) 自動將成品自動部署到近似生產環境;(4) 自動為codebase打上標籤;(5) 自動執行回歸測試;(6)自動生成度量報告。
四、持續整合伺服器的選擇
在進行持續整合實踐前,應當正確的選擇並配置持續整合伺服器。比較成熟的持續整合伺服器包括:cruisecontrol, anthill, bamboo, teamcity, continuum 等。cruisecontrol作為開源產品,以其對於各種scm以及構建工具的廣泛支援而被許多開發團隊所接受。而開發自動化專家 duvall 採用一致的評估標準和很多說明性示例,介紹了一些開源 ci 伺服器,包括 continuum、cruisecontrol 和 luntbuild。並指出「
要根據 自己的 具體技術和政策需求對工具進行分析
」。並用以下五個指標來評估ci工具,它們分別是:(1) 特性;(2) 可靠性;(3) 壽命;(4) 目標環境;(5) 易用性。結果如下表:
而cruisecontrol是我唯一真正用過的持續整合工具,
它現在靈活而又強大功能也讓我瞠目,而且配置與管理也較兩年前容易得多啦。
為什麼說它強大呢?因為你只要想得到的問題,它也都會有所考慮。
朋友的blog
上有些cruisecontrol的最佳實踐足以證明這一點,只要你肯去實踐。
五、只有持續整合伺服器是遠遠不夠的
正如jez humble所說,
cruisecontrol和其它的ci工具本質上只不過是乙個定時器,時間一到,做你讓它做的事情
。所以,必然要有其它工具與其結合,方顯持續整合的本色。這些工具又是什麼呢?想測試的話,你就要用一些測試工具,如junit,jwebunit,selenium等等;想檢查**標準的話,你就要用checkstyle等**規範檢查工具;想要了解測試覆蓋率的話,你可能就要用到jcoverage啦。當然,想得到二進位制檔案,就要用到ant,make之類的工具啦。
六、最重要的事:實踐與反思
也許這些東西大家都知道,而且有些人可能已經實踐過啦。無論這些實踐的結果是怎樣的,一定不要忘記總結和反思。如果這些實踐成功了,不要把它歸功於這個工具,而是要總結一下為什麼會成功,如果你願意的話,還可以和大家分享一下。如果這些實踐失敗了,也不要把它歸功於這個工具,而是要反思一下,是否正確地使用了這個工具,團隊成員是否都喜歡這個工具,為什麼?
持續整合 什麼應該自動化?
一 什麼是持續整合 continuous integration 這個名詞已經在軟體開發領域持續了n年,乙個比較簡單的定義如下 持續整合 ci 是一種實踐,可以讓團隊在持續的基礎 上收到反饋並進行改進,不必等到開發周期後期才尋找和修復缺陷。通俗一點兒說,就是指 對於開發人員的每一次 提交,都自動地把...
持續整合 什麼應該自動化?
持續整合 什麼應該自動化?一 什麼是持續整合 continuous integration 這個名詞已經在軟體開發領域持續了n年,乙個比較簡單的定義如下 持續整合 ci 是一種實踐,可以讓團隊在持續的基礎 上收到反饋並進行改進,不必等到開發周期後期才尋找和修復缺陷。通俗一點兒說,就是指對於開發人員的...
持續整合 什麼應該自動化?
一 什麼是持續整合 continuous integration 這個名詞已經在軟體開發領域持續了n年,乙個比較簡單的定義如下 持續整合 ci 是一種實踐,可以讓團隊在持續的基礎 上收到反饋並進行改進,不必等到開發周期後期才尋找和修復缺陷。通俗一點兒說,就是指對於開發人員的每一次 提交,都自動地把r...