蔣苗林
【摘 要】目前軟件開發(fā)越來越多采用敏捷開發(fā)方式,敏捷開發(fā)在軟件工程領(lǐng)域中得到廣泛應(yīng)用,如何能在不斷變化的需求中快速適應(yīng)和保證軟件的質(zhì)量也顯得尤為重要,持續(xù)集成在軟件開發(fā)的應(yīng)用能夠快速提供版本和完成驗證交付。
【關(guān)鍵詞】軟件開發(fā);持續(xù)集成;Jenkins
0.前言
持續(xù)集成是一種軟件開發(fā)實踐,對于提高軟件開發(fā)效率并保障軟件開發(fā)質(zhì)量提供了理論基礎(chǔ)。本文通過具體實例,介紹了如何借助持續(xù)集成工具提高軟件生產(chǎn)力。
1.當前公司的版本發(fā)布工作
當前各個公司的版本發(fā)布工作差異很大,有些公司沒有每日編譯版本,等到正式發(fā)布時發(fā)布一下;有些公司則是寫一個腳本每天晚上定時編譯一下,第二天開發(fā)人員就可以使用前一晚上生成的版本;有些公司使用持續(xù)集成工具編譯版本,代碼有更改時就會觸發(fā)編譯;還有些公司根據(jù)每日編譯的狀態(tài)觸發(fā)電子裝備,亮紅燈或綠燈來顯示版本的狀態(tài),有些甚至利用發(fā)聲裝備發(fā)出導致版本編譯失敗的代碼上傳者的名字。
可見各個公司在持續(xù)集成方面的投入差異巨大,持續(xù)集成投入越多,軟件版本交付能力就會越強,軟件生產(chǎn)力也就越高。
2.持續(xù)集成的核心價值
(1)持續(xù)集成中的任何一個環(huán)節(jié)都是自動完成的無需太多的人工干預,有利于減少重復過程以節(jié)省時間、費用和工作量。
(2)持續(xù)集成保障了每個時間點上團隊成員提交的代碼是能成功集成的。換言之,任何時間點都能第一時間發(fā)現(xiàn)軟件的集成問題,使任意時間發(fā)布可部署的軟件成為了可能。
(3)持續(xù)集成還能利于軟件本身的發(fā)展趨勢,這點在需求不明確或是頻繁性變更的情景中尤其重要,持續(xù)集成的質(zhì)量能幫助團隊進行有效決策,同時建立團隊對開發(fā)產(chǎn)品的信心。
3.持續(xù)集成的原則包括
(1)需要版本控制軟件保障團隊成員提交的代碼不會導致集成失敗。常用的版本控制軟件有IBM Rational ClearCase、CVS、SVN等。
(2)開發(fā)人員必須及時向版本控制庫中提交代碼,也必須經(jīng)常性地從版本控制庫中更新代碼到本地。
(3)需要有專門的集成服務(wù)器來執(zhí)行集成構(gòu)建。根據(jù)項目的具體實際,集成構(gòu)建可以被軟件的修改來直接觸發(fā),也可以定時啟動,如每1小時構(gòu)建一次,還可以由上游項目編譯成功后觸發(fā)。
(4)必須保證構(gòu)建的成功。如果構(gòu)建失敗,修復構(gòu)建過程中的錯誤是優(yōu)先級最高的工作。一旦修復,需要手動啟動一次構(gòu)建。
4.持續(xù)集成工具介紹
4.1持續(xù)集成工具主要分兩大類,開源的和商用的
(1)開源工具。
CruiseControl、Hudson、LuntBuild
(2)商用工具。
TeamCity、AntHill Pro、Bamboo、QuickBuild
CruiseControl和LuntBuild在持續(xù)集成領(lǐng)域進入較早,Hudson作為OpenSource里持續(xù)集成的后起之秀,現(xiàn)在已經(jīng)趕超了這兩個前輩,目前恐怕是使用最多的一個CI Server了。國外使用商用的工具多些,而在國內(nèi)用開源的多些,其中Hudson工具使用較為廣泛,現(xiàn)在叫Jenkins,是基于Java開發(fā)的一種持續(xù)集成工具,它主要包括:
(1)持續(xù)的軟件版本發(fā)布/測試項目。
(2)監(jiān)控外部調(diào)用執(zhí)行的工作。
4.2 Jenkins具有以下突出的特點
(1)開源免費,容易安裝,只需要執(zhí)行Java-jar jenkins.war即可。
(2)容易配置,可以通過友好的webGUI來配置,幾乎每個配置都有幫助信息提示。
(3)跨平臺,幾乎支持所有的平臺,例如Windows,Ubuntu/Debian,RedHat/Fedora/CentOS,MacOSX,openSUSE,F(xiàn)reeBSD,OpenBSD,Solaris/OpenIndiana.Gentoo。
(4)master/slave支持分布式的build,jenkins能夠分發(fā)build/test的負載到多臺機器,能夠更好地利用硬件資源,提高build的時間。
(5)插件支持,已有200多個插件,可通過第三方的插件來擴展。
(6)Junit/TestNG測試報告,能夠很好地顯示各種測試的報告,且可以生成失敗的趨向圖。
5.應(yīng)用舉例
(1)某產(chǎn)品開發(fā)部有驅(qū)動、軟件等小組,各小組的代碼是各自管理的,但接口文件是共同的。假如軟件小組的某個頭文件修改的時候驅(qū)動小組也需要同步修改,該文件受軟件小組管理,驅(qū)動小組需要同步,如果靠人工每天去看對方的頭文件是否更改,比較費時,也容易漏掉。如果你使用Jenkins工具新建一線程,專門檢測對方的接口文件,當然對方該部分代碼需要給對方小組某成員開讀權(quán)限,當檢測到對方頭文件有修改時則將該文件check到本地,然后再check自己的代碼,將對方的接口文件上傳到自己的庫里。完成后再觸發(fā)郵件系統(tǒng)將郵件發(fā)送到相關(guān)開發(fā)人員。這樣開發(fā)人員能夠把更多的精力花在關(guān)鍵事務(wù)上。
(2)上傳代碼到自動化測試一氣呵成。某部門開發(fā)一套指紋識別項目,開發(fā)人員優(yōu)化該項目時,由于優(yōu)化過程是持續(xù)累積的過程,每天可能都能提高一點,當開發(fā)人員將階段性的成果上傳到代碼庫中,系統(tǒng)按設(shè)置的一定時間間隔完成編譯并將編譯庫放到服務(wù)器,自動化測試程序也會每隔一定時間去取這個庫,并運行程序,并將運行結(jié)果直接發(fā)送到開發(fā)人員工作信箱里。開發(fā)人員也能很快速方便地看到自己優(yōu)化的結(jié)果。
6.結(jié)語
工欲善其事,必先利其器。軟件開發(fā)也要借助于提高軟件生產(chǎn)力的工具,持續(xù)集成工具能夠把開發(fā)人員從繁瑣的代碼同步、版本發(fā)布、查找編譯失敗等工作中解脫出來,讓開發(fā)人員把精力聚焦在核心業(yè)務(wù)上。
【參考文獻】
[1]Jez Humble David Farley.持續(xù)交付發(fā)布可靠軟件的系統(tǒng)方法[M].北京:人民郵電出版社,2011:50-51.