持續(xù)集成

持續(xù)集成是什么?

互聯(lián)網(wǎng)軟件的開發(fā)和發(fā)布商架,已經(jīng)形成了一套標準流程余舶,最重要的組成部分就是持續(xù)集成(Continuous integration,簡稱CI)发绢。
本文簡要介紹持續(xù)集成的概念和做法硬耍。


一垄琐、概念

持續(xù)集成指的是,頻繁地(一天多次)將代碼集成到主干经柴。

它的好處主要有兩個狸窘。

  • (1)快速發(fā)現(xiàn)錯誤。每完成一點更新坯认,就集成到主干翻擒,可以快速發(fā)現(xiàn)錯誤,定位錯誤也比較容易牛哺。
  • (2)防止分支大幅偏離主干陋气。如果不是經(jīng)常集成,主干又在不斷更新引润,會導致以后集成的難度變大巩趁,甚至難以集成。

持續(xù)集成的目的淳附,就是讓產(chǎn)品可以快速迭代议慰,同時還能保持高質量。 它的核心措施是燃观,代碼集成到主干之前褒脯,必須通過自動化測試便瑟。只要有一個測試用例失敗缆毁,就不能集成。
Martin Fowler說過到涂,"持續(xù)集成并不能消除Bug脊框,而是讓它們非常容易發(fā)現(xiàn)和改正。"
與持續(xù)集成相關的践啄,還有兩個概念浇雹,分別是持續(xù)交付和持續(xù)部署。

二屿讽、持續(xù)交付

持續(xù)交付(Continuous delivery)指的是昭灵,頻繁地將軟件的新版本,交付給質量團隊或者用戶伐谈,以供評審烂完。如果評審通過,代碼就進入生產(chǎn)階段诵棵。
持續(xù)交付可以看作持續(xù)集成的下一步抠蚣。它強調的是,不管怎么更新履澳,軟件是隨時隨地可以交付的嘶窄。

三怀跛、持續(xù)部署

持續(xù)部署(continuous deployment)是持續(xù)交付的下一步,指的是代碼通過評審以后柄冲,自動部署到生產(chǎn)環(huán)境吻谋。
持續(xù)部署的目標是,代碼在任何時刻都是可部署的羊初,可以進入生產(chǎn)階段滨溉。
持續(xù)部署的前提是能自動化完成測試、構建长赞、部署等步驟晦攒。它與持續(xù)交付的區(qū)別,可以參考下圖得哆。

四脯颜、流程

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

4.1 提交

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

4.2 測試(第一輪)

代碼倉庫對commit操作配置了鉤子(hook),只要提交代碼或者合并進主干近上,就會跑自動化測試剔宪。
測試有好幾種。

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

第一輪至少要跑單元測試葱绒。

4.3 構建

通過第一輪測試,代碼就可以合并進主干斗锭,就算可以交付了地淀。
交付后,就先進行構建(build)岖是,再進入第二輪測試帮毁。所謂構建,指的是將源碼轉換為可以運行的實際代碼豺撑,比如安裝依賴烈疚,配置各種資源(樣式表、JS腳本前硫、圖片)等等胞得。
常用的構建工具如下。
Jenkins
Travis
Codeship
Strider
Jenkins和Strider是開源軟件,Travis和Codeship對于開源項目可以免費使用阶剑。它們都會將構建和測試跃巡,在一次運行中執(zhí)行完成。

4.4 測試(第二輪)

構建完成牧愁,就要進行第二輪測試素邪。如果第一輪已經(jīng)涵蓋了所有測試內容,第二輪可以省略猪半,當然兔朦,這時構建步驟也要移到第一輪測試前面。
第二輪是全面測試磨确,單元測試和集成測試都會跑沽甥,有條件的話,也要做端對端測試乏奥。所有測試以自動化為主摆舟,少數(shù)無法自動化的測試用例,就要人工跑邓了。
需要強調的是恨诱,新版本的每一個更新點都必須測試到。如果測試的覆蓋率不高骗炉,進入后面的部署階段后照宝,很可能會出現(xiàn)嚴重的問題。

4.5 部署

通過了第二輪測試句葵,當前代碼就是一個可以直接部署的版本(artifact)厕鹃。將這個版本的所有文件打包(tar filename.tar *)存檔,發(fā)到生產(chǎn)服務器笼呆。
生產(chǎn)服務器將打包文件熊响,解包成本地的一個目錄旨别,再將運行路徑的符號鏈接(symlink)指向這個目錄诗赌,然后重新啟動應用。這方面的部署工具有Ansible秸弛,Chef铭若,Puppet等。

4.6 回滾

一旦當前版本發(fā)生問題递览,就要回滾到上一個版本的構建結果叼屠。最簡單的做法就是修改一下符號鏈接,指向上一個版本的目錄绞铃。

來源

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末镜雨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子儿捧,更是在濱河造成了極大的恐慌荚坞,老刑警劉巖挑宠,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異颓影,居然都是意外死亡各淀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門诡挂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碎浇,“玉大人,你說我怎么就攤上這事璃俗∨В” “怎么了?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵城豁,是天一觀的道長币狠。 經(jīng)常有香客問我,道長蝴蜓,這世上最難降的妖魔是什么受神? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮魏颓,結果婚禮上岭辣,老公的妹妹穿的比我還像新娘。我一直安慰自己甸饱,他們只是感情好沦童,可當我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叹话,像睡著了一般偷遗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驼壶,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天氏豌,我揣著相機與錄音,去河邊找鬼热凹。 笑死泵喘,一個胖子當著我的面吹牛,可吹牛的內容都是我干的般妙。 我是一名探鬼主播纪铺,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碟渺!你這毒婦竟也來了鲜锚?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芜繁,沒想到半個月后攒霹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡浆洗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年催束,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伏社。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡抠刺,死狀恐怖,靈堂內的尸體忽然破棺而出摘昌,到底是詐尸還是另有隱情速妖,我是刑警寧澤,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布聪黎,位于F島的核電站罕容,受9級特大地震影響,放射性物質發(fā)生泄漏稿饰。R本人自食惡果不足惜锦秒,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喉镰。 院中可真熱鬧旅择,春花似錦、人聲如沸侣姆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捺宗。三九已至柱蟀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚜厉,已是汗流浹背长已。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弯囊,地道東北人痰哨。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓胶果,卻偏偏與公主長得像匾嘱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子早抠,可洞房花燭夜當晚...
    茶點故事閱讀 43,606評論 2 350

推薦閱讀更多精彩內容