既然認(rèn)為它是好的,就要發(fā)揮到極限-系列之一持續(xù)集成

          既然認(rèn)為它是好的,就要發(fā)揮到極限,這是XP的思想。
          持續(xù)集成無(wú)疑是一種非常好的方法,那么在實(shí)際的軟件開(kāi)發(fā)過(guò)程中就應(yīng)該把它的好發(fā)揮到極限,但就我自己經(jīng)歷過(guò)的項(xiàng)目以來(lái),只在一個(gè)項(xiàng)目中真正的較好的實(shí)現(xiàn)了持續(xù)集成,不知道大家的情況是怎么樣?持續(xù)集成的最出名的代表還是MS的Daily Build和冒煙測(cè)試了。

          持續(xù)集成的好處
          1、集成變得自動(dòng)化,不依賴(lài)人工。
                這點(diǎn)好處對(duì)于項(xiàng)目是多工程的情況下特別的明顯,可以想想,一個(gè)項(xiàng)目在多工程的情況下,如果不是 自動(dòng)集成部署,而需要人手工的話(huà),需要耗費(fèi)多大的精力,對(duì)于單工程的項(xiàng)目來(lái)說(shuō)這點(diǎn)可能不是那么的明顯。
          2、盡早的發(fā)現(xiàn)集成出現(xiàn)的錯(cuò)誤。
                在不做持續(xù)集成的情況下,項(xiàng)目通常也許是在一個(gè)迭代的后期才開(kāi)始將所有人做的東西進(jìn)行集成,這個(gè)時(shí)候才暴露出集成的問(wèn)題,這個(gè)時(shí)候再去查就已經(jīng)非常困難了,因?yàn)闁|西已經(jīng)很多了,采用持續(xù)集成可一定程度減少這個(gè)問(wèn)題,因?yàn)槌掷m(xù)集成保證了每次都只是小部分的集成,出現(xiàn)問(wèn)題的話(huà)也知道范圍被鎖定在一個(gè)小的部分,而且通??赏ㄟ^(guò)單元測(cè)試、功能測(cè)試以及集成測(cè)試來(lái)保證在持續(xù)集成進(jìn)行時(shí)盡早發(fā)現(xiàn)錯(cuò)誤,提醒導(dǎo)致持續(xù)集成失敗的相關(guān)人員。
          3、不斷的發(fā)布新的可運(yùn)行版本。
                這點(diǎn)無(wú)論是對(duì)于開(kāi)發(fā)人員、項(xiàng)目管理人員和客戶(hù)帶來(lái)的好處都是很明顯的,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)每天可以通過(guò)這個(gè)版本看到自己所完成的任務(wù),增強(qiáng)任務(wù)完成的滿(mǎn)足感;對(duì)于項(xiàng)目管理人員來(lái)說(shuō)則可以看到項(xiàng)目的開(kāi)發(fā)在按計(jì)劃的進(jìn)行;對(duì)于客戶(hù)來(lái)說(shuō),可以盡早的看到系統(tǒng)以確定和需求的符合性。

          持續(xù)集成的實(shí)現(xiàn)
          既然持續(xù)集成這么好,那就在項(xiàng)目中引入持續(xù)集成吧,怎么樣讓項(xiàng)目變得可進(jìn)行持續(xù)集成呢?在開(kāi)源界中對(duì)于持續(xù)集成有非常多的良好的支持工具,對(duì)于持續(xù)集成而言,通常是兩個(gè)部分:
          項(xiàng)目自動(dòng)部署
          項(xiàng)目自動(dòng)部署的工具可選擇采用ant或maven,通過(guò)將之前項(xiàng)目手動(dòng)部署的步驟翻譯為ant或maven的編譯腳本來(lái)完成項(xiàng)目的自動(dòng)部署,當(dāng)然,這要求對(duì)于ant或maven一定程度的熟悉,不過(guò)無(wú)論是ant還是maven都很容易上手,同時(shí)可能會(huì)需要對(duì)原有工程進(jìn)行一定的改造,如采用maven一般都需要先把引用的包全部歸入一個(gè) 倉(cāng)庫(kù)中。
          一個(gè)項(xiàng)目的自動(dòng)部署腳本有些時(shí)候可能很簡(jiǎn)單,有些時(shí)候會(huì)很復(fù)雜,所有有些自動(dòng)部署腳本真的是可能需要寫(xiě)上個(gè)一天,但這是非常值得的。
          在自動(dòng)部署腳本編寫(xiě)完畢后,就可以通過(guò)命令或在IDE中直接部署就可完成整個(gè)項(xiàng)目的自動(dòng)部署的動(dòng)作。
          通常項(xiàng)目自動(dòng)部署的過(guò)程需要有這么幾步:
          1、清空以往的編譯。
          2、編譯項(xiàng)目工程。
          3、運(yùn)行項(xiàng)目工程中的單元測(cè)試。
          4、部署工程。
          5、如為多工程的項(xiàng)目則其他工程也需要重復(fù)上面的1、2、3、4步驟。
          6、運(yùn)行功能測(cè)試。
          7、生成項(xiàng)目網(wǎng)站(以便查看項(xiàng)目的代碼情況、測(cè)試運(yùn)行情況等)(可選)。
          在自動(dòng)部署完成時(shí),即可看到項(xiàng)目的運(yùn)行版本,同時(shí)從項(xiàng)目網(wǎng)站中可了解項(xiàng)目的代碼情況、測(cè)試的運(yùn)行情況等。
          項(xiàng)目持續(xù)集成
          項(xiàng)目持續(xù)集成的工具可選擇采用luntbuild或cruisecontrol(簡(jiǎn)稱(chēng)cc),兩者各有千秋,這里不進(jìn)行比較。項(xiàng)目持續(xù)集成需要根據(jù)項(xiàng)目所需要的持續(xù)集成的情況來(lái)編寫(xiě)相應(yīng)的持續(xù)集成腳本(luntbuild可通過(guò)web管理界面完成,cc通過(guò)編寫(xiě)腳本完成),通常項(xiàng)目持續(xù)集成的腳本會(huì)涉及到這些:
          1、決定是采用版本管理工具(cvs)感知的方式或每日定時(shí)(nightly-build、daily-build)進(jìn)行持續(xù)集成的方式,如決定采用版本管理工具感知的方式,需要確定對(duì)于版本管理工具狀態(tài)獲取的頻率,如每隔20分鐘檢查一下是否有更新。
          2、持續(xù)集成進(jìn)行,首先是從版本管理工具中獲取最新的系統(tǒng)版本,接著就是調(diào)用項(xiàng)目自動(dòng)部署腳本完成項(xiàng)目的自動(dòng)部署(luntbuild和cc都可直接的調(diào)用ant或maven腳本)。
          3、合并自動(dòng)部署后的測(cè)試結(jié)果到日志中(這點(diǎn)在cc中是要做的,對(duì)luntbuild不清楚)。
          4、根據(jù)自動(dòng)部署的結(jié)果通知相關(guān)的人員(email、jabber等等都可以)。
          在腳本編寫(xiě)完成后,啟動(dòng)工具項(xiàng)目即可進(jìn)行持續(xù)集成了,可以通過(guò)持續(xù)集成的網(wǎng)站去查看項(xiàng)目的持續(xù)集成情況,其中會(huì)包含持續(xù)集成執(zhí)行過(guò)程的信息、測(cè)試執(zhí)行的情況、持續(xù)集成的統(tǒng)計(jì)分析等。
          總的來(lái)說(shuō)搭建項(xiàng)目的持續(xù)集成環(huán)境不會(huì)太困難,只要對(duì)ant或maven、luntbuild或cc有一定的熟悉,同時(shí)明白項(xiàng)目手動(dòng)部署是如何進(jìn)行的。
          關(guān)于工具的使用可以參見(jiàn)幾個(gè)工具的網(wǎng)站,同時(shí)也可滿(mǎn)江紅.開(kāi)源參考上的《持續(xù)集成實(shí)踐之cruisecontrol》。

          經(jīng)驗(yàn)總結(jié)
          從03年開(kāi)始在自己所經(jīng)歷的項(xiàng)目中就開(kāi)始實(shí)行持續(xù)集成,但最終執(zhí)行的好的只有一個(gè)項(xiàng)目,到底是什么原因呢?在這些項(xiàng)目中項(xiàng)目的持續(xù)集成環(huán)境都是搭建好了的,但就是沒(méi)執(zhí)行好,總結(jié)下來(lái)發(fā)現(xiàn)的問(wèn)題就在于:
          1、開(kāi)發(fā)人員沒(méi)有對(duì)持續(xù)集成形成足夠的重視。
                在幾個(gè)項(xiàng)目中都是因?yàn)槌掷m(xù)集成在失敗后就沒(méi)人去調(diào)好,因?yàn)樵陂_(kāi)發(fā)人員本機(jī)運(yùn)行是好的,放入CVS后由于持續(xù)集成進(jìn)行時(shí)的環(huán)境不一樣確實(shí)是有可能會(huì)造成失敗的,但持續(xù)集成失敗后無(wú)人重視,導(dǎo)致之后的持續(xù)集成一直就沒(méi)什么意義。
          2、缺乏足夠的測(cè)試。
                導(dǎo)致了項(xiàng)目即使持續(xù)集成成功了但可運(yùn)行版本中仍然是有N多的bug,這說(shuō)明持續(xù)集成是非常需要單元測(cè)試、功能測(cè)試的支撐的,否則意義將大打折扣。
          還有一個(gè)是持續(xù)集成通常需要耗費(fèi)很長(zhǎng)的時(shí)間,web型系統(tǒng)的持續(xù)集成通常需要重啟web應(yīng)用服務(wù)器;第一個(gè)問(wèn)題倒是可以通過(guò)采取增量方式進(jìn)行持續(xù)集成來(lái)解決,但由于不是工具直接支持的,所以這塊實(shí)現(xiàn)還是比較麻煩的;第二個(gè)問(wèn)題就比較麻煩了,反正在我自己經(jīng)歷的項(xiàng)目中這個(gè)問(wèn)題一直沒(méi)很好的解決,通常是需要在持續(xù)集成結(jié)束后人工手動(dòng)的啟動(dòng)web應(yīng)用服務(wù)器(我試著在cc腳本的最后去啟動(dòng)應(yīng)用服務(wù)器,仍然是無(wú)效的)。
          無(wú)論如何,持續(xù)集成帶來(lái)的好處是非常明顯的,值得去做,既然是好的,就要把它發(fā)揮到極限(對(duì)持續(xù)集成給予足夠的重視、增加測(cè)試),那就讓我們?cè)陧?xiàng)目中實(shí)現(xiàn)持續(xù)集成吧!

          posted on 2006-01-21 19:14 BlueDavy 閱讀(1978) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 軟件工程

          評(píng)論

          # re: 既然認(rèn)為它是好的,就要發(fā)揮到極限-系列之一持續(xù)集成 2009-12-21 21:30 study

          非常贊同前輩,我們之前的項(xiàng)目中使用了持續(xù)集成,但是后來(lái)做到單元測(cè)試的時(shí)候就半途而廢了??赡茴I(lǐng)導(dǎo)不重視吧! 所以項(xiàng)目后期的開(kāi)發(fā)中也就沒(méi)有繼續(xù)做持續(xù)集成了。暈掉了!  回復(fù)  更多評(píng)論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

          <2006年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          統(tǒng)計(jì)

          隨筆分類(lèi)

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 略阳县| 新闻| 镇雄县| 都安| 介休市| 德昌县| 宜章县| 会东县| 永春县| 湄潭县| 上犹县| 炎陵县| 同德县| 河南省| 东台市| 明溪县| 常山县| 双城市| 永和县| 大连市| 承德县| 中牟县| 嘉禾县| 南漳县| 越西县| 元氏县| 江永县| 山西省| 双桥区| 五大连池市| 兴化市| 通江县| 英山县| 乌鲁木齐县| 安化县| 凤山市| 于都县| 双牌县| 宾阳县| 贵州省| 高阳县|