持續(xù)集成

互聯(lián)網(wǎng)軟件的開發(fā)和發(fā)布,已經(jīng)形成了一套標(biāo)準(zhǔn)流程,最重要的組成部分就是持續(xù)集成(Continuous integration蜂科,簡稱CI)。


bg2015092301.png

一短条、概念

持續(xù)集成指的是导匣,頻繁地(一天多次)將代碼集成到主干。
它的好處主要有兩個茸时。
(1)快速發(fā)現(xiàn)錯誤贡定。每完成一點更新,就集成到主干可都,可以快速發(fā)現(xiàn)錯誤缓待,定位錯誤也比較容易。
(2)防止分支大幅偏離主干渠牲。如果不是經(jīng)常集成旋炒,主干又在不斷更新,會導(dǎo)致以后集成的難度變大签杈,甚至難以集成国葬。
持續(xù)集成的目的,就是讓產(chǎn)品可以快速迭代,同時還能保持高質(zhì)量汇四。它的核心措施是,代碼集成到主干之前踢涌,必須通過自動化測試通孽。只要有一個測試用例失敗,就不能集成睁壁。
Martin Fowler說過背苦,"持續(xù)集成并不能消除Bug,而是讓它們非常容易發(fā)現(xiàn)和改正潘明。"
與持續(xù)集成相關(guān)的行剂,還有兩個概念,分別是持續(xù)交付和持續(xù)部署钳降。

二厚宰、持續(xù)交付

持續(xù)交付(Continuous delivery)指的是,頻繁地將軟件的新版本遂填,交付給質(zhì)量團隊或者用戶铲觉,以供評審。如果評審?fù)ㄟ^吓坚,代碼就進入生產(chǎn)階段撵幽。
持續(xù)交付可以看作持續(xù)集成的下一步。它強調(diào)的是礁击,不管怎么更新盐杂,軟件是隨時隨地可以交付的。

三哆窿、持續(xù)部署

持續(xù)部署(continuous deployment)是持續(xù)交付的下一步链烈,指的是代碼通過評審以后,自動部署到生產(chǎn)環(huán)境更耻。
持續(xù)部署的目標(biāo)是测垛,代碼在任何時刻都是可部署的,可以進入生產(chǎn)階段秧均。
持續(xù)部署的前提是能自動化完成測試食侮、構(gòu)建、部署等步驟目胡。它與持續(xù)交付的區(qū)別锯七,可以參考下圖。


bg2015092302.jpg

四誉己、流程

根據(jù)持續(xù)集成的設(shè)計眉尸,代碼從提交到生產(chǎn),整個過程有以下幾步。

4.1 提交

流程的第一步噪猾,是開發(fā)者向代碼倉庫提交代碼霉祸。所有后面的步驟都始于本地代碼的一次提交(commit)。

4.2 測試(第一輪)

代碼倉庫對commit操作配置了鉤子(hook)袱蜡,只要提交代碼或者合并進主干丝蹭,就會跑自動化測試。

測試有好幾種坪蚁。

第一輪至少要跑單元測試奔穿。

4.3 構(gòu)建

通過第一輪測試,代碼就可以合并進主干敏晤,就算可以交付了贱田。

交付后,就先進行構(gòu)建(build)嘴脾,再進入第二輪測試男摧。所謂構(gòu)建,指的是將源碼轉(zhuǎn)換為可以運行的實際代碼统阿,比如安裝依賴彩倚,配置各種資源(樣式表、JS腳本扶平、圖片)等等帆离。

常用的構(gòu)建工具如下。

Jenkins和Strider是開源軟件结澄,Travis和Codeship對于開源項目可以免費使用哥谷。它們都會將構(gòu)建和測試,在一次運行中執(zhí)行完成麻献。

4.4 測試(第二輪)

構(gòu)建完成们妥,就要進行第二輪測試。如果第一輪已經(jīng)涵蓋了所有測試內(nèi)容勉吻,第二輪可以省略监婶,當(dāng)然,這時構(gòu)建步驟也要移到第一輪測試前面齿桃。

第二輪是全面測試惑惶,單元測試和集成測試都會跑,有條件的話短纵,也要做端對端測試带污。所有測試以自動化為主,少數(shù)無法自動化的測試用例香到,就要人工跑鱼冀。

需要強調(diào)的是报破,新版本的每一個更新點都必須測試到。如果測試的覆蓋率不高千绪,進入后面的部署階段后充易,很可能會出現(xiàn)嚴重的問題。

4.5 部署

通過了第二輪測試荸型,當(dāng)前代碼就是一個可以直接部署的版本(artifact)蔽氨。將這個版本的所有文件打包( tar filename.tar * )存檔,發(fā)到生產(chǎn)服務(wù)器帆疟。

生產(chǎn)服務(wù)器將打包文件,解包成本地的一個目錄宇立,再將運行路徑的符號鏈接(symlink)指向這個目錄踪宠,然后重新啟動應(yīng)用。這方面的部署工具有Ansible妈嘹,Chef柳琢,Puppet等。

4.6 回滾

一旦當(dāng)前版本發(fā)生問題润脸,就要回滾到上一個版本的構(gòu)建結(jié)果柬脸。最簡單的做法就是修改一下符號鏈接,指向上一個版本的目錄毙驯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倒堕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子爆价,更是在濱河造成了極大的恐慌垦巴,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铭段,死亡現(xiàn)場離奇詭異骤宣,居然都是意外死亡,警方通過查閱死者的電腦和手機序愚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門憔披,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爸吮,你說我怎么就攤上這事芬膝。” “怎么了拗胜?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵蔗候,是天一觀的道長。 經(jīng)常有香客問我埂软,道長锈遥,這世上最難降的妖魔是什么纫事? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮所灸,結(jié)果婚禮上丽惶,老公的妹妹穿的比我還像新娘。我一直安慰自己爬立,他們只是感情好钾唬,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侠驯,像睡著了一般抡秆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吟策,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天儒士,我揣著相機與錄音,去河邊找鬼檩坚。 笑死着撩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匾委。 我是一名探鬼主播拖叙,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赂乐!你這毒婦竟也來了薯鳍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤沪猴,失蹤者是張志新(化名)和其女友劉穎辐啄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體运嗜,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡壶辜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了担租。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砸民。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奋救,靈堂內(nèi)的尸體忽然破棺而出岭参,到底是詐尸還是另有隱情,我是刑警寧澤尝艘,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布演侯,位于F島的核電站,受9級特大地震影響背亥,放射性物質(zhì)發(fā)生泄漏秒际。R本人自食惡果不足惜悬赏,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望娄徊。 院中可真熱鬧闽颇,春花似錦、人聲如沸寄锐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橄仆。三九已至剩膘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盆顾,已是汗流浹背援雇。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留椎扬,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓具温,卻偏偏與公主長得像蚕涤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铣猩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354