CI持續(xù)集成介紹

互聯(lián)網(wǎng)軟件的開發(fā)和發(fā)布莫湘,已經(jīng)形成了一套標準流程哄尔,最重要的組成部分就是持續(xù)集成(Continuous integration振愿,簡稱CI)毅糟。

一红选、概念

持續(xù)集成(Continuous Integration)指的是,頻繁地(一天多次)將代碼集成到主干姆另。
持續(xù)集成的目的喇肋,就是讓產(chǎn)品可以快速迭代,同時還能保持高質(zhì)量迹辐。
它的核心措施是蝶防,代碼集成到主干之前,必須通過自動化測試明吩。只要有一個測試用例失敗间学,就不能集成。

它的好處主要有:

1. 提高開發(fā)效率

持續(xù)集成可以把工程師從繁瑣的任務(wù)中解放出來印荔,提高工作效率菱鸥。并且能有效減少發(fā)布版本中的錯誤和 Bug 數(shù)量。防止分支大幅偏離主干躏鱼。如果不是經(jīng)常集成氮采,主干又在不斷更新,會導(dǎo)致以后集成的難度變大染苛,甚至難以集成

2. 快速發(fā)現(xiàn)并定位 Bugs

通過各種例行測試鹊漠,您的團隊可以在問題變嚴重前就發(fā)現(xiàn)并定位到程序的 Bugs。減少由程序錯誤帶來的損失茶行。每完成一點更新躯概,就集成到主干,可以快速發(fā)現(xiàn)錯誤畔师,定位錯誤也比較容易娶靡。

3.更快速的發(fā)布更新

持續(xù)集成可以幫助您的團隊更快速、更積極的發(fā)布程序更新程序看锉。在發(fā)布時可自動完成大量重復(fù)工作完成姿锭,節(jié)省人力。

持續(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ù)集成的基礎(chǔ)上亭枷,將集成后的代碼部署到更貼近真實運行環(huán)境的「類生產(chǎn)環(huán)境」(production-like environments)中袭艺。比如,我們完成單元測試后叨粘,可以把代碼部署到連接數(shù)據(jù)庫的 Staging 環(huán)境中更多的測試猾编。如果代碼沒有問題,可以繼續(xù)手動部署到生產(chǎn)環(huán)境中升敲。

三答倡、持續(xù)部署

持續(xù)部署(continuous deployment)是持續(xù)交付的下一步,指的是代碼通過評審以后驴党,自動部署到生產(chǎn)環(huán)境瘪撇。

持續(xù)部署的目標是,代碼在任何時刻都是可部署的港庄,可以進入生產(chǎn)階段倔既。

持續(xù)部署的前提是能自動化完成測試、構(gòu)建攘轩、部署等步驟叉存。它與持續(xù)交付的區(qū)別,可以參考下圖度帮。

四、流程

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

4.1 提交

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

4.2 測試(第一輪)

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

測試有好幾種。

  • 單元測試:針對函數(shù)或模塊的測試
  • 集成測試:針對整體產(chǎn)品的某個功能的測試辜贵,又稱功能測試
  • 端對端測試:從用戶界面直達數(shù)據(jù)庫的全鏈路測試

第一輪至少要跑單元測試悯蝉。

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)用娄猫。這方面的部署工具有AnsibleChef生闲,Puppet等媳溺。

4.6 回滾

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捉兴,一起剝皮案震驚了整個濱河市蝎困,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌倍啥,老刑警劉巖禾乘,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虽缕,居然都是意外死亡始藕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門氮趋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伍派,“玉大人,你說我怎么就攤上這事剩胁∷咧玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵昵观,是天一觀的道長晾腔。 經(jīng)常有香客問我舌稀,道長,這世上最難降的妖魔是什么建车? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任扩借,我火速辦了婚禮椒惨,結(jié)果婚禮上缤至,老公的妹妹穿的比我還像新娘。我一直安慰自己康谆,他們只是感情好领斥,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沃暗,像睡著了一般月洛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上孽锥,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天嚼黔,我揣著相機與錄音,去河邊找鬼惜辑。 笑死唬涧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盛撑。 我是一名探鬼主播碎节,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抵卫!你這毒婦竟也來了狮荔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤介粘,失蹤者是張志新(化名)和其女友劉穎殖氏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姻采,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡雅采,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了偎谁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片总滩。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖巡雨,靈堂內(nèi)的尸體忽然破棺而出闰渔,到底是詐尸還是另有隱情,我是刑警寧澤铐望,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布冈涧,位于F島的核電站茂附,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏督弓。R本人自食惡果不足惜营曼,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愚隧。 院中可真熱鬧蒂阱,春花似錦、人聲如沸狂塘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荞胡。三九已至妈踊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泪漂,已是汗流浹背廊营。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萝勤,地道東北人露筒。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像纵刘,于是被迫代替她去往敵國和親邀窃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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

  • 前言 在進行今天內(nèi)容講解前假哎,首先我們來介紹下持續(xù)集成相關(guān)的概念瞬捕。這樣會讓我們對軟件開發(fā)有一個整體的認識。 持續(xù)集成...
    sessionCh閱讀 1,432評論 0 3
  • 簡述 從剛開始的時候兩眼一抹黑舵抹,到磕磕碰碰的終于讓測試包可以在代碼提交的時候順利的自動構(gòu)建肪虎,團隊終于向CI和CD的...
    天高愉悅閱讀 1,276評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)惧蛹,斷路器扇救,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 假期做了朋友圈閱讀分享,時不時有朋友問英語啟蒙香嗓,其實兩年前我也是不了解和不認可這件事情的迅腔。沒想到一了解一認可一堅持...
    木木sani閱讀 552評論 0 1
  • 好記性不如爛鍵盤,記錄一下自己遇到的問題靠娱。 tabs切換的時候會有一瞬間白屏沧烈,百度了一堆,都是ionic1改變ti...
    不錯哦_e6d8閱讀 3,026評論 0 1