持續(xù)集成入門篇

在理解一個(gè)新的東西時(shí)张抄,我們首先要去了解下它的概念砂蔽。

概念

持續(xù)集成(英語(yǔ):Continuous integration,縮寫為 CI)署惯,一種軟件工程流程(即左驾,開發(fā)流程),將所有工程師對(duì)于軟件的工作復(fù)本极谊,每天集成數(shù)次到共用主線(mainline)上诡右。

這個(gè)名稱最早由葛來(lái)迪?布區(qū)(Grady Booch)在他的布區(qū)方法中提出,但是他并沒(méi)有提到要每天集成數(shù)次怀酷。之后成為極限編程(extreme programming稻爬,縮寫為XP)的一部分。在測(cè)試驅(qū)動(dòng)開發(fā)(TDD)的作法中蜕依,通常還會(huì)搭配自動(dòng)單元測(cè)試桅锄。

持續(xù)集成的提出琉雳,主要是為了解決軟件進(jìn)行系統(tǒng)集成時(shí)面臨的各項(xiàng)問(wèn)題(版本沖突等問(wèn)題),極限編程稱這些問(wèn)題為集成地獄(integration hell)友瘤。

在了解到持續(xù)集成的概念(一直不斷在項(xiàng)目主線分支上開發(fā))后翠肘,我們來(lái)看看我們?yōu)槭裁匆龀掷m(xù)集成呢,做持續(xù)集成有什么好處呢辫秧?

為什么要做持續(xù)集成

持續(xù)集成在目前大多數(shù)的公司里都會(huì)有這樣或者那樣的使用束倍。有的會(huì)選擇一些Open Source的工具,如CruiseControl盟戏,Hudson绪妹,LuntBuild等等等等,有的會(huì)購(gòu)買有更好服務(wù)柿究,更強(qiáng)功能的商業(yè)產(chǎn)品邮旷,如TeamCity,QuickBuild等等蝇摸,而有的會(huì)選擇自己實(shí)現(xiàn)婶肩,如Cron+Ant/Maven/Make等等。那么使用下來(lái)效果如何呢貌夕?真得達(dá)到了預(yù)期的效果嗎律歼?我想來(lái)恐怕未必吧,否則也就不會(huì)有這么多的討論了啡专。

它的好處主要有兩個(gè)险毁。

  • 快速發(fā)現(xiàn)錯(cuò)誤。每完成一點(diǎn)更新植旧,就集成到主干辱揭,可以快速發(fā)現(xiàn)錯(cuò)誤离唐,定位錯(cuò)誤也比較容易病附。
  • 防止分支大幅偏離主干。如果不是經(jīng)常集成亥鬓,主干又在不斷更新完沪,會(huì)導(dǎo)致以后集成的難度變大,甚至難以集成嵌戈。

持續(xù)集成的目的覆积,就是讓產(chǎn)品可以快速迭代,同時(shí)還能保持高質(zhì)量熟呛。它的核心措施是宽档,代碼集成到主干之前,必須通過(guò)自動(dòng)化測(cè)試庵朝。只要有一個(gè)測(cè)試用例失敗吗冤,就不能集成又厉。

Martin Fowler(不要告訴我,你不知道大名鼎鼎的Martin叔椎瘟,提示覆致,IOC和DI那篇文章)說(shuō)過(guò),"持續(xù)集成并不能消除Bug肺蔚,而是讓它們非常容易發(fā)現(xiàn)和改正煌妈。"

與持續(xù)集成相關(guān)的,還有兩個(gè)概念宣羊,分別是持續(xù)交付持續(xù)部署璧诵。

持續(xù)交付

持續(xù)交付(Continuous delivery)指的是,頻繁地將軟件的新版本仇冯,交付給質(zhì)量團(tuán)隊(duì)或者用戶腮猖,以供評(píng)審。如果評(píng)審?fù)ㄟ^(guò)赞枕,代碼就進(jìn)入生產(chǎn)階段澈缺。

持續(xù)交付可以看作持續(xù)集成的下一步。它強(qiáng)調(diào)的是炕婶,不管怎么更新姐赡,軟件是隨時(shí)隨地可以交付的。

持續(xù)部署

持續(xù)部署(continuous deployment)是持續(xù)交付的下一步柠掂,指的是代碼通過(guò)評(píng)審以后项滑,自動(dòng)部署到生產(chǎn)環(huán)境。

持續(xù)部署的目標(biāo)是涯贞,代碼在任何時(shí)刻都是可部署的枪狂,可以進(jìn)入生產(chǎn)階段。

持續(xù)交付VS持續(xù)部署

在了解到做持續(xù)集成的好處之后宋渔,那么我們?cè)鯓觼?lái)做持續(xù)集成呢州疾?首先,我們得要有一臺(tái)(或好幾臺(tái))服務(wù)器用來(lái)做持續(xù)集成皇拣。

持續(xù)集成服務(wù)器的選擇

在進(jìn)行持續(xù)集成實(shí)踐前严蓖,應(yīng)當(dāng)正確的選擇并配置持續(xù)集成服務(wù)器。比較成熟的持續(xù)集成服務(wù)器包括:CruiseControl, Anthill, Bamboo, TeamCity, Continuum 等氧急。

CruiseControl作為開源產(chǎn)品颗胡,以其對(duì)于各種SCM(源碼管理,制造業(yè)上是供應(yīng)鏈關(guān)系管理)以及構(gòu)建工具的廣泛支持而被許多開發(fā)團(tuán)隊(duì)所接受吩坝。而開發(fā)自動(dòng)化專家 Duvall 采用一致的評(píng)估標(biāo)準(zhǔn)和很多說(shuō)明性示例毒姨,介紹了一些開源 CI 服務(wù)器,包括 Continuum钉寝、CruiseControl 和 Luntbuild弧呐。并指出“要根據(jù) 自己的 具體技術(shù)和政策需求對(duì)工具進(jìn)行分析”鸳址。并用以下五個(gè)指標(biāo)來(lái)評(píng)估CI工具,它們分別是:(1) 特性泉懦;(2) 可靠性稿黍;(3) 壽命;(4) 目標(biāo)環(huán)境崩哩;(5) 易用性巡球。

而CruiseControl是我唯一真正用過(guò)的持續(xù)集成工具,它現(xiàn)在靈活而又強(qiáng)大功能也讓我瞠目邓嘹,而且配置與管理也較兩年前容易得多啦酣栈。
為什么說(shuō)它強(qiáng)大呢?因?yàn)槟阒灰氲玫降膯?wèn)題汹押,它也都會(huì)有所考慮矿筝。朋友的Blog上有些CruiseControl的最佳實(shí)踐足以證明這一點(diǎn),只要你肯去實(shí)踐

只有持續(xù)集成服務(wù)器是遠(yuǎn)遠(yuǎn)不夠的

正如Jez Humble所說(shuō)棚贾,CruiseControl和其它的CI工具本質(zhì)上只不過(guò)是一個(gè)定時(shí)器窖维,時(shí)間一到,做你讓它做的事情妙痹。所以铸史,必然要有其它工具與其結(jié)合,方顯持續(xù)集成的本色怯伊。這些工具又是什么呢琳轿?

想測(cè)試的話,你就要用一些測(cè)試工具耿芹,如JUnit崭篡,JWebUnit,Selenium等等吧秕;
想檢查代碼標(biāo)準(zhǔn)的話琉闪,你就要用checkstyle等代碼規(guī)范檢查工具;
想要了解測(cè)試覆蓋率的話寇甸,你可能就要用到JCoverage啦塘偎。
當(dāng)然疗涉,想得到二進(jìn)制文件拿霉,就要用到Ant,Make之類的工具啦咱扣。

總結(jié)

持續(xù)集成只是軟件開發(fā)的一種方式而已绽淘,雖然好處挺顯而易見的,但是能夠很好實(shí)踐的團(tuán)隊(duì)不知道又有多少闹伪,我們只有在開發(fā)的過(guò)程中不斷總結(jié)適合自己團(tuán)隊(duì)的開發(fā)方式沪铭,把項(xiàng)目完成即可壮池。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末椰憋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赔退,更是在濱河造成了極大的恐慌橙依,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硕旗,死亡現(xiàn)場(chǎng)離奇詭異窗骑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)漆枚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門创译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人墙基,你說(shuō)我怎么就攤上這事软族。” “怎么了残制?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵互订,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我痘拆,道長(zhǎng)仰禽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任纺蛆,我火速辦了婚禮吐葵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桥氏。我一直安慰自己温峭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布字支。 她就那樣靜靜地躺著凤藏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪堕伪。 梳的紋絲不亂的頭發(fā)上揖庄,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音欠雌,去河邊找鬼蹄梢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛富俄,可吹牛的內(nèi)容都是我干的禁炒。 我是一名探鬼主播而咆,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幕袱!你這毒婦竟也來(lái)了暴备?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤们豌,失蹤者是張志新(化名)和其女友劉穎馍驯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玛痊,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汰瘫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了擂煞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片混弥。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖对省,靈堂內(nèi)的尸體忽然破棺而出蝗拿,到底是詐尸還是另有隱情,我是刑警寧澤蒿涎,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布哀托,位于F島的核電站,受9級(jí)特大地震影響劳秋,放射性物質(zhì)發(fā)生泄漏仓手。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一玻淑、第九天 我趴在偏房一處隱蔽的房頂上張望嗽冒。 院中可真熱鬧,春花似錦补履、人聲如沸添坊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贬蛙。三九已至,卻和暖如春谚攒,著一層夾襖步出監(jiān)牢的瞬間阳准,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工五鲫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溺职,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓位喂,卻偏偏與公主長(zhǎng)得像浪耘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子塑崖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容