時(shí)下大多數(shù)開(kāi)發(fā)人員對(duì)持續(xù)集成(Continuous Integration,CI)的基本原理已經(jīng)很熟悉,但是他們中只有一小部分人能夠從優(yōu)化CI設(shè)置中徹底受益。毫無(wú)疑問(wèn),一個(gè)有效的持續(xù)集成環(huán)境可以幫助你的團(tuán)隊(duì)節(jié)省時(shí)間、金錢(qián)甚至減少存有的顧慮。通過(guò)持續(xù)集成,我們可以更早地發(fā)現(xiàn)bug,更輕松地找出導(dǎo)致其發(fā)生的原因并終有效地解決。持續(xù)集成可以更好地管理源代碼,更有效地使用自動(dòng)化分析工具,鼓勵(lì)編寫(xiě)好的測(cè)試,跟蹤進(jìn)度以及突破開(kāi)發(fā)人員活動(dòng)中的瓶頸。持續(xù)集成可以讓部署過(guò)程更簡(jiǎn)單且發(fā)布過(guò)程更加平穩(wěn)和可靠。借助于CI,管理者可以得到更多的圖表,了解到更多的信息,而開(kāi)發(fā)者可以專(zhuān)注于開(kāi)發(fā)而不用過(guò)多交流,也更加高興。換句話(huà)說(shuō),如果不使用持續(xù)集成,那么好比用記事本編寫(xiě)代碼來(lái)開(kāi)發(fā)軟件,雖然可行,但是太低效了。

  在本文中,來(lái)自Wakaleo咨詢(xún)公司的首席咨詢(xún)師John Smart,將給我們介紹如何把持續(xù)集成由一個(gè)名義上的定時(shí)作業(yè),變?yōu)殚_(kāi)發(fā)活動(dòng)中一個(gè)有效、而且能提高生產(chǎn)力的“中樞”。

  持續(xù)溝通流

  一個(gè)良好的敏捷開(kāi)發(fā)環(huán)境本質(zhì)特征是盡可能的大化小組成員間的信息流。每一個(gè)開(kāi)發(fā)人員都需要盡快地知道何時(shí)構(gòu)建過(guò)程失敗,或者何處改動(dòng)可能會(huì)對(duì)應(yīng)用程序質(zhì)量造成不良影響。如果構(gòu)建過(guò)程失敗了,那么首要工作是要知道做了什么改動(dòng),以及為什么做這些改動(dòng):所有的這些信息都應(yīng)當(dāng)在開(kāi)發(fā)人員敲擊幾下鍵盤(pán)后能通過(guò)直接的方式獲得。

  即便是基本的CI設(shè)置,它也會(huì)在構(gòu)建失敗后給開(kāi)發(fā)人員發(fā)送電子郵件。其實(shí)我們只需要下一點(diǎn)點(diǎn)功夫,能比現(xiàn)在做得更好。一個(gè)良好設(shè)置的持續(xù)集成服務(wù)器應(yīng)該像團(tuán)隊(duì)溝通中的中樞一樣工作。除了簡(jiǎn)單地發(fā)送電子郵件進(jìn)行提醒外,其實(shí)還有很多事情可以做,例如現(xiàn)代CI工具中的許多特性??這些特性可以更平穩(wěn)、更有效地向開(kāi)發(fā)人員反映代碼改動(dòng)和構(gòu)建失敗的情況。

  電子郵件大概是CI提醒方式中古老也是常使用的方式了,只是因?yàn)樗浅F毡槎乙子诮。盡管如此,事實(shí)上電子郵件是一個(gè)相對(duì)低效的提醒機(jī)制。當(dāng)構(gòu)建過(guò)程失敗時(shí),你希望被盡快地通知到,越快越好。如果因?yàn)殡娮余]箱客戶(hù)端的更新而等上15分鐘的話(huà),那么可能浪費(fèi)掉了開(kāi)發(fā)時(shí)間。除此之外,電子郵件通常很容易讓開(kāi)發(fā)人員分心。在企業(yè)里,每天的非緊急的或是不重要的電子郵件都會(huì)有很多。事實(shí)上許多的開(kāi)發(fā)人員都禁用電子郵件提示,只是在中定時(shí)地去檢查幾次郵件。

  即時(shí)消息相對(duì)而言則是一個(gè)更加合適的提醒方式,有好幾個(gè)原因。重要的原因是,即時(shí)消息是(幾乎是)即時(shí)的。你不再需要因?yàn)殡娮余]件客戶(hù)端在服務(wù)器中檢查新郵件而等上10分鐘,使用即時(shí)消息,你能被立即通知到。它比電子郵件更加方便,而且閱讀起來(lái)也更快。不僅如此,來(lái)自構(gòu)建服務(wù)器的IM消息也會(huì)得到相關(guān)的重視,而不會(huì)淹沒(méi)在大量無(wú)用的其它信息中。

  當(dāng)事件發(fā)生后,使用快速即時(shí)信息和花上10到15分鐘使用電子郵件也許只相差幾分鐘,但千萬(wàn)不要低估這幾分鐘的重要性。那幾分鐘足夠讓一個(gè)開(kāi)發(fā)人員丟失重點(diǎn),并轉(zhuǎn)移到其它的一些事情上,結(jié)果導(dǎo)致了開(kāi)發(fā)人員很難回到上下文中去修復(fù)問(wèn)題。

  使用即時(shí)消息的另外一個(gè)好處在于它可以擴(kuò)展到桌面以外的應(yīng)用。像BeeJive這樣的應(yīng)用程序可以將即時(shí)消息用到移動(dòng)設(shè)備諸如Blackberries(黑莓)和iPhones上。這樣的話(huà),即使開(kāi)發(fā)人員不在辦公室,也能收到至關(guān)重要的構(gòu)建失敗提醒。

  即時(shí)消息提醒比起電子郵件,可以更多的與CI服務(wù)器進(jìn)行交互。作為一個(gè)溝通的中介,即時(shí)消息要比電子郵件更加的自然,它還可以進(jìn)行比 Subversion 提交信息還要多的交互。通過(guò)利用即時(shí)消息,如今的一些CI工具不僅僅可以發(fā)送提醒,還可以讓開(kāi)發(fā)人員更輕松地與構(gòu)建服務(wù)器以及其他組員進(jìn)行交互與交流。

  當(dāng)然,即時(shí)消息不是僅有的另一種可用提醒方式。如果想讓大家注意到構(gòu)建信息的話(huà),好采用一種能夠融入相應(yīng)企業(yè)文化的提醒機(jī)制。例如,一些公司使用社交網(wǎng) 絡(luò)的工具例如Twitter,作為一個(gè)有效的內(nèi)部交流渠道。對(duì)于這些組織而言,使用Twitter也可以算是一種有效的構(gòu)建提示方法了。

  保持構(gòu)建過(guò)程高效率

  持續(xù)集成環(huán)境的一個(gè)首要目標(biāo)是要保證開(kāi)發(fā)過(guò)程的順利進(jìn)行,并且避免由集成問(wèn)題帶來(lái)的障礙和開(kāi)發(fā)延期。當(dāng)集成問(wèn)題突然出現(xiàn)時(shí),開(kāi)發(fā)人員應(yīng)當(dāng)有義務(wù)盡快的去提交一些代碼來(lái)解決這個(gè)問(wèn)題,以避免影響到其他開(kāi)發(fā)人員。如果沒(méi)有持續(xù)集成環(huán)境,開(kāi)發(fā)人員通常會(huì)在集成問(wèn)題上卡住而找不到一個(gè)解決方案(“嘿,它在我的機(jī)器上能運(yùn)行啊!”)。

  想讓開(kāi)發(fā)過(guò)程一直保持好的狀態(tài),那么團(tuán)隊(duì)成員(尤其是團(tuán)隊(duì)領(lǐng)頭人,流程專(zhuān)家等)需要能夠監(jiān)測(cè)構(gòu)建過(guò)程,這樣他們可以識(shí)別定位出日常生活里降低開(kāi)發(fā)人員效率的問(wèn)題。其中好的方法是去了解如何好地使用構(gòu)建感測(cè)。