既然認(rèn)為它是好的,就要發(fā)揮到極限-系列之一持續(xù)集成
既然認(rèn)為它是好的,就要發(fā)揮到極限,這是XP的思想。
持續(xù)集成無疑是一種非常好的方法,那么在實際的軟件開發(fā)過程中就應(yīng)該把它的好發(fā)揮到極限,但就我自己經(jīng)歷過的項目以來,只在一個項目中真正的較好的實現(xiàn)了持續(xù)集成,不知道大家的情況是怎么樣?持續(xù)集成的最出名的代表還是MS的Daily Build和冒煙測試了。
持續(xù)集成的好處
1、集成變得自動化,不依賴人工。
這點好處對于項目是多工程的情況下特別的明顯,可以想想,一個項目在多工程的情況下,如果不是 自動集成部署,而需要人手工的話,需要耗費多大的精力,對于單工程的項目來說這點可能不是那么的明顯。
2、盡早的發(fā)現(xiàn)集成出現(xiàn)的錯誤。
在不做持續(xù)集成的情況下,項目通常也許是在一個迭代的后期才開始將所有人做的東西進(jìn)行集成,這個時候才暴露出集成的問題,這個時候再去查就已經(jīng)非常困難了,因為東西已經(jīng)很多了,采用持續(xù)集成可一定程度減少這個問題,因為持續(xù)集成保證了每次都只是小部分的集成,出現(xiàn)問題的話也知道范圍被鎖定在一個小的部分,而且通常可通過單元測試、功能測試以及集成測試來保證在持續(xù)集成進(jìn)行時盡早發(fā)現(xiàn)錯誤,提醒導(dǎo)致持續(xù)集成失敗的相關(guān)人員。
3、不斷的發(fā)布新的可運行版本。
這點無論是對于開發(fā)人員、項目管理人員和客戶帶來的好處都是很明顯的,對于開發(fā)人員來說每天可以通過這個版本看到自己所完成的任務(wù),增強(qiáng)任務(wù)完成的滿足感;對于項目管理人員來說則可以看到項目的開發(fā)在按計劃的進(jìn)行;對于客戶來說,可以盡早的看到系統(tǒng)以確定和需求的符合性。
持續(xù)集成的實現(xiàn)
既然持續(xù)集成這么好,那就在項目中引入持續(xù)集成吧,怎么樣讓項目變得可進(jìn)行持續(xù)集成呢?在開源界中對于持續(xù)集成有非常多的良好的支持工具,對于持續(xù)集成而言,通常是兩個部分:
項目自動部署
項目自動部署的工具可選擇采用ant或maven,通過將之前項目手動部署的步驟翻譯為ant或maven的編譯腳本來完成項目的自動部署,當(dāng)然,這要求對于ant或maven一定程度的熟悉,不過無論是ant還是maven都很容易上手,同時可能會需要對原有工程進(jìn)行一定的改造,如采用maven一般都需要先把引用的包全部歸入一個 倉庫中。
一個項目的自動部署腳本有些時候可能很簡單,有些時候會很復(fù)雜,所有有些自動部署腳本真的是可能需要寫上個一天,但這是非常值得的。
在自動部署腳本編寫完畢后,就可以通過命令或在IDE中直接部署就可完成整個項目的自動部署的動作。
通常項目自動部署的過程需要有這么幾步:
1、清空以往的編譯。
2、編譯項目工程。
3、運行項目工程中的單元測試。
4、部署工程。
5、如為多工程的項目則其他工程也需要重復(fù)上面的1、2、3、4步驟。
6、運行功能測試。
7、生成項目網(wǎng)站(以便查看項目的代碼情況、測試運行情況等)(可選)。
在自動部署完成時,即可看到項目的運行版本,同時從項目網(wǎng)站中可了解項目的代碼情況、測試的運行情況等。
項目持續(xù)集成
項目持續(xù)集成的工具可選擇采用luntbuild或cruisecontrol(簡稱cc),兩者各有千秋,這里不進(jìn)行比較。項目持續(xù)集成需要根據(jù)項目所需要的持續(xù)集成的情況來編寫相應(yīng)的持續(xù)集成腳本(luntbuild可通過web管理界面完成,cc通過編寫腳本完成),通常項目持續(xù)集成的腳本會涉及到這些:
1、決定是采用版本管理工具(cvs)感知的方式或每日定時(nightly-build、daily-build)進(jìn)行持續(xù)集成的方式,如決定采用版本管理工具感知的方式,需要確定對于版本管理工具狀態(tài)獲取的頻率,如每隔20分鐘檢查一下是否有更新。
2、持續(xù)集成進(jìn)行,首先是從版本管理工具中獲取最新的系統(tǒng)版本,接著就是調(diào)用項目自動部署腳本完成項目的自動部署(luntbuild和cc都可直接的調(diào)用ant或maven腳本)。
3、合并自動部署后的測試結(jié)果到日志中(這點在cc中是要做的,對luntbuild不清楚)。
4、根據(jù)自動部署的結(jié)果通知相關(guān)的人員(email、jabber等等都可以)。
在腳本編寫完成后,啟動工具項目即可進(jìn)行持續(xù)集成了,可以通過持續(xù)集成的網(wǎng)站去查看項目的持續(xù)集成情況,其中會包含持續(xù)集成執(zhí)行過程的信息、測試執(zhí)行的情況、持續(xù)集成的統(tǒng)計分析等。
總的來說搭建項目的持續(xù)集成環(huán)境不會太困難,只要對ant或maven、luntbuild或cc有一定的熟悉,同時明白項目手動部署是如何進(jìn)行的。
關(guān)于工具的使用可以參見幾個工具的網(wǎng)站,同時也可滿江紅.開源參考上的《持續(xù)集成實踐之cruisecontrol》。
經(jīng)驗總結(jié)
從03年開始在自己所經(jīng)歷的項目中就開始實行持續(xù)集成,但最終執(zhí)行的好的只有一個項目,到底是什么原因呢?在這些項目中項目的持續(xù)集成環(huán)境都是搭建好了的,但就是沒執(zhí)行好,總結(jié)下來發(fā)現(xiàn)的問題就在于:
1、開發(fā)人員沒有對持續(xù)集成形成足夠的重視。
在幾個項目中都是因為持續(xù)集成在失敗后就沒人去調(diào)好,因為在開發(fā)人員本機(jī)運行是好的,放入CVS后由于持續(xù)集成進(jìn)行時的環(huán)境不一樣確實是有可能會造成失敗的,但持續(xù)集成失敗后無人重視,導(dǎo)致之后的持續(xù)集成一直就沒什么意義。
2、缺乏足夠的測試。
導(dǎo)致了項目即使持續(xù)集成成功了但可運行版本中仍然是有N多的bug,這說明持續(xù)集成是非常需要單元測試、功能測試的支撐的,否則意義將大打折扣。
還有一個是持續(xù)集成通常需要耗費很長的時間,web型系統(tǒng)的持續(xù)集成通常需要重啟web應(yīng)用服務(wù)器;第一個問題倒是可以通過采取增量方式進(jìn)行持續(xù)集成來解決,但由于不是工具直接支持的,所以這塊實現(xiàn)還是比較麻煩的;第二個問題就比較麻煩了,反正在我自己經(jīng)歷的項目中這個問題一直沒很好的解決,通常是需要在持續(xù)集成結(jié)束后人工手動的啟動web應(yīng)用服務(wù)器(我試著在cc腳本的最后去啟動應(yīng)用服務(wù)器,仍然是無效的)。
無論如何,持續(xù)集成帶來的好處是非常明顯的,值得去做,既然是好的,就要把它發(fā)揮到極限(對持續(xù)集成給予足夠的重視、增加測試),那就讓我們在項目中實現(xiàn)持續(xù)集成吧!
持續(xù)集成無疑是一種非常好的方法,那么在實際的軟件開發(fā)過程中就應(yīng)該把它的好發(fā)揮到極限,但就我自己經(jīng)歷過的項目以來,只在一個項目中真正的較好的實現(xiàn)了持續(xù)集成,不知道大家的情況是怎么樣?持續(xù)集成的最出名的代表還是MS的Daily Build和冒煙測試了。
持續(xù)集成的好處
1、集成變得自動化,不依賴人工。
這點好處對于項目是多工程的情況下特別的明顯,可以想想,一個項目在多工程的情況下,如果不是 自動集成部署,而需要人手工的話,需要耗費多大的精力,對于單工程的項目來說這點可能不是那么的明顯。
2、盡早的發(fā)現(xiàn)集成出現(xiàn)的錯誤。
在不做持續(xù)集成的情況下,項目通常也許是在一個迭代的后期才開始將所有人做的東西進(jìn)行集成,這個時候才暴露出集成的問題,這個時候再去查就已經(jīng)非常困難了,因為東西已經(jīng)很多了,采用持續(xù)集成可一定程度減少這個問題,因為持續(xù)集成保證了每次都只是小部分的集成,出現(xiàn)問題的話也知道范圍被鎖定在一個小的部分,而且通常可通過單元測試、功能測試以及集成測試來保證在持續(xù)集成進(jìn)行時盡早發(fā)現(xiàn)錯誤,提醒導(dǎo)致持續(xù)集成失敗的相關(guān)人員。
3、不斷的發(fā)布新的可運行版本。
這點無論是對于開發(fā)人員、項目管理人員和客戶帶來的好處都是很明顯的,對于開發(fā)人員來說每天可以通過這個版本看到自己所完成的任務(wù),增強(qiáng)任務(wù)完成的滿足感;對于項目管理人員來說則可以看到項目的開發(fā)在按計劃的進(jìn)行;對于客戶來說,可以盡早的看到系統(tǒng)以確定和需求的符合性。
持續(xù)集成的實現(xiàn)
既然持續(xù)集成這么好,那就在項目中引入持續(xù)集成吧,怎么樣讓項目變得可進(jìn)行持續(xù)集成呢?在開源界中對于持續(xù)集成有非常多的良好的支持工具,對于持續(xù)集成而言,通常是兩個部分:
項目自動部署
項目自動部署的工具可選擇采用ant或maven,通過將之前項目手動部署的步驟翻譯為ant或maven的編譯腳本來完成項目的自動部署,當(dāng)然,這要求對于ant或maven一定程度的熟悉,不過無論是ant還是maven都很容易上手,同時可能會需要對原有工程進(jìn)行一定的改造,如采用maven一般都需要先把引用的包全部歸入一個 倉庫中。
一個項目的自動部署腳本有些時候可能很簡單,有些時候會很復(fù)雜,所有有些自動部署腳本真的是可能需要寫上個一天,但這是非常值得的。
在自動部署腳本編寫完畢后,就可以通過命令或在IDE中直接部署就可完成整個項目的自動部署的動作。
通常項目自動部署的過程需要有這么幾步:
1、清空以往的編譯。
2、編譯項目工程。
3、運行項目工程中的單元測試。
4、部署工程。
5、如為多工程的項目則其他工程也需要重復(fù)上面的1、2、3、4步驟。
6、運行功能測試。
7、生成項目網(wǎng)站(以便查看項目的代碼情況、測試運行情況等)(可選)。
在自動部署完成時,即可看到項目的運行版本,同時從項目網(wǎng)站中可了解項目的代碼情況、測試的運行情況等。
項目持續(xù)集成
項目持續(xù)集成的工具可選擇采用luntbuild或cruisecontrol(簡稱cc),兩者各有千秋,這里不進(jìn)行比較。項目持續(xù)集成需要根據(jù)項目所需要的持續(xù)集成的情況來編寫相應(yīng)的持續(xù)集成腳本(luntbuild可通過web管理界面完成,cc通過編寫腳本完成),通常項目持續(xù)集成的腳本會涉及到這些:
1、決定是采用版本管理工具(cvs)感知的方式或每日定時(nightly-build、daily-build)進(jìn)行持續(xù)集成的方式,如決定采用版本管理工具感知的方式,需要確定對于版本管理工具狀態(tài)獲取的頻率,如每隔20分鐘檢查一下是否有更新。
2、持續(xù)集成進(jìn)行,首先是從版本管理工具中獲取最新的系統(tǒng)版本,接著就是調(diào)用項目自動部署腳本完成項目的自動部署(luntbuild和cc都可直接的調(diào)用ant或maven腳本)。
3、合并自動部署后的測試結(jié)果到日志中(這點在cc中是要做的,對luntbuild不清楚)。
4、根據(jù)自動部署的結(jié)果通知相關(guān)的人員(email、jabber等等都可以)。
在腳本編寫完成后,啟動工具項目即可進(jìn)行持續(xù)集成了,可以通過持續(xù)集成的網(wǎng)站去查看項目的持續(xù)集成情況,其中會包含持續(xù)集成執(zhí)行過程的信息、測試執(zhí)行的情況、持續(xù)集成的統(tǒng)計分析等。
總的來說搭建項目的持續(xù)集成環(huán)境不會太困難,只要對ant或maven、luntbuild或cc有一定的熟悉,同時明白項目手動部署是如何進(jìn)行的。
關(guān)于工具的使用可以參見幾個工具的網(wǎng)站,同時也可滿江紅.開源參考上的《持續(xù)集成實踐之cruisecontrol》。
經(jīng)驗總結(jié)
從03年開始在自己所經(jīng)歷的項目中就開始實行持續(xù)集成,但最終執(zhí)行的好的只有一個項目,到底是什么原因呢?在這些項目中項目的持續(xù)集成環(huán)境都是搭建好了的,但就是沒執(zhí)行好,總結(jié)下來發(fā)現(xiàn)的問題就在于:
1、開發(fā)人員沒有對持續(xù)集成形成足夠的重視。
在幾個項目中都是因為持續(xù)集成在失敗后就沒人去調(diào)好,因為在開發(fā)人員本機(jī)運行是好的,放入CVS后由于持續(xù)集成進(jìn)行時的環(huán)境不一樣確實是有可能會造成失敗的,但持續(xù)集成失敗后無人重視,導(dǎo)致之后的持續(xù)集成一直就沒什么意義。
2、缺乏足夠的測試。
導(dǎo)致了項目即使持續(xù)集成成功了但可運行版本中仍然是有N多的bug,這說明持續(xù)集成是非常需要單元測試、功能測試的支撐的,否則意義將大打折扣。
還有一個是持續(xù)集成通常需要耗費很長的時間,web型系統(tǒng)的持續(xù)集成通常需要重啟web應(yīng)用服務(wù)器;第一個問題倒是可以通過采取增量方式進(jìn)行持續(xù)集成來解決,但由于不是工具直接支持的,所以這塊實現(xiàn)還是比較麻煩的;第二個問題就比較麻煩了,反正在我自己經(jīng)歷的項目中這個問題一直沒很好的解決,通常是需要在持續(xù)集成結(jié)束后人工手動的啟動web應(yīng)用服務(wù)器(我試著在cc腳本的最后去啟動應(yīng)用服務(wù)器,仍然是無效的)。
無論如何,持續(xù)集成帶來的好處是非常明顯的,值得去做,既然是好的,就要把它發(fā)揮到極限(對持續(xù)集成給予足夠的重視、增加測試),那就讓我們在項目中實現(xiàn)持續(xù)集成吧!
posted on 2006-01-21 19:14 BlueDavy 閱讀(1975) 評論(1) 編輯 收藏 所屬分類: 軟件工程