自動化運維持續(xù)集成

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

持續(xù)集成的目的,就是讓產(chǎn)品可以快速迭代囚痴,同時還能保持高質量叁怪。

它的核心措施是,代碼集成到主干之前深滚,必須通過自動化測試奕谭。只要有一個測試用例失敗,就不能集成痴荐。

討論關注以下幾點:

  1. 持續(xù)集成概念的理解血柳。
  2. 了解持續(xù)交付和持續(xù)部署。
  3. 熟悉持續(xù)集成操作流程生兆。

一难捌、概述

持續(xù)集成流程:

開發(fā)團隊 -> 源代碼編碼(開發(fā)語言)-> 代碼版本控制(Gitlab) -> Docker 構建(創(chuàng)建鏡像)-> 靜態(tài)代碼分析(白盒測試)-> 自動化單元測試 -> 代碼覆蓋率(覆蓋率測試)-> Docker 版本(發(fā)布到容器)-> 提供部署到測試環(huán)境 -> 自動化功能測試 -> 發(fā)布報告 -> 生產(chǎn)部署

二、持續(xù)集成

  1. CI 過程:代碼編寫 -> 源代碼庫(GitHub or gitlab)-> CI 服務器(代碼構建鸦难、自動化測試栖榨、結果反饋【構建結果】)
  2. 涉及 CI 工具:Jenkins、Travis CI明刷、TeamCity婴栽、Gitlab CI、CircleCI辈末、Codeship 等纽哥,相關資料可以查詢對應的官網(wǎng),其中應用廣泛的 Jenkins 和 Travis CI腊嗡,Gitlab CI 是開源的 Rails 項目 GitLab 的一個組成部分,GitLab CI 能與 GitLab 完全集成捅彻,可以通過使用 GitLab API 輕松地作為項目的鉤子。
持續(xù)集成構建目的:
  1. 及早發(fā)現(xiàn)集成錯誤鞍陨,且由于修訂的內容較小所以易于追蹤步淹,這可以節(jié)省專案的時間與成本。
  2. 避免發(fā)布日期的前一分鐘發(fā)生混亂诚撵,當每個人都會嘗試為他們所造成的那一點點不相容的版本做檢查缭裆。
  3. 當單元測試失敗或發(fā)生錯誤,若開發(fā)人員需要在不除錯的情況下還原程式碼庫到一個沒有問題的狀態(tài)寿烟,只需要放棄一小部份的更改(因為集成的次數(shù)頻繁)澈驼。
  4. 讓“最新”的程式可保持可用的狀態(tài)供測試、展示或發(fā)布用筛武。
  5. 頻繁的提交程式碼會促使開發(fā)人員建立模組化缝其,低復雜性的程式碼。
持續(xù)集成自動化測試目的:
  1. 強制執(zhí)行頻繁的自動化測試紀律
  2. 當改變對全系統(tǒng)造成影響時立即反饋
  3. 自動化測試和持續(xù)性集成產(chǎn)生的軟件度量(如代碼覆蓋度量徘六,代碼復雜度和功能完整性等)標準將開發(fā)人員集中在開發(fā)功能性内边,高品質的程式碼上,并幫助開發(fā)團隊發(fā)展待锈。
持續(xù)集成存在的問題:
  1. 構建一個自動化測試套件需要大量的工作假残,包括不斷努力以覆蓋新功能,并依照特定情境進行程式碼修改炉擅,持續(xù)性集成可以在不需要測試套件下執(zhí)行,但是必須手動和經(jīng)常地完成阳惹,生產(chǎn)產(chǎn)品的品質保證成本將會提高谍失。
  2. 構建構建系統(tǒng)需要一些工作,而且可能變得復雜莹汤,難以靈活修改快鱼。但是,也有一些開放源代碼的持續(xù)集成的專案軟件可以使用纲岭。
  3. 如果范圍很小或包含無法測試的舊版代碼抹竹,持續(xù)性集成不一定有價值。
  4. 增加的價值取決于測試的品質以及代碼的真實可測性止潮。
  5. 較大的團隊意味著不斷將代碼添加到集成隊列中窃判,因此追蹤交付(同時保持品質)很困難,而排隊可能會減慢所有人的進度喇闸。
  6. 通過一天的多次提交和合并袄琳,功能的部分代碼可以輕松推送询件,如此一來集成測試將會失敗直到整個功能開發(fā)完成。

三唆樊、持續(xù)交付(Continuous delivery宛琅,縮寫為 CD)

持續(xù)集成 -> 再次測試 -> 結果發(fā)布

  1. CD 是一種軟件工程手法,讓軟件產(chǎn)品的產(chǎn)出過程在一個短周期內完成逗旁,以保證軟件可以穩(wěn)定嘿辟、持續(xù)的保持在隨時可以釋出的狀況。它的目標在于讓軟件的建立片效、測試與釋出變得更快以及更頻繁红伦。這種方式可以減少軟件開發(fā)的成本與時間,減少風險堤舒。

  2. 持續(xù)交付與 DevOps 的含義很相似色建,所以經(jīng)常被混淆。但是它們是不同的兩個概念舌缤。DevOps 的范圍更廣箕戳,它以文化變遷為中心,特別是軟件交付過程所涉及的多個團隊之間的合作(開發(fā)国撵、運維陵吸、QA、管理部門等)介牙,并且將軟件交付的過程自動化环础。另一方面线得,持續(xù)交付是一種自動化交付的手段募狂,關注點在于將不同的過程集中起來祸穷,并且更快雷滚、更頻繁地執(zhí)行這些過程揭措。因此绊含,DevOps 可以是持續(xù)交付的一個產(chǎn)物逃顶,持續(xù)交付直接匯入 DevOps以政。

  3. 持續(xù)交付也與持續(xù)部署混淆。持續(xù)部署意味著所有的變更都會被自動部署到生產(chǎn)環(huán)境中抖誉。持續(xù)交付意味著所有的變更都可以被部署到生產(chǎn)環(huán)境中,但是出于業(yè)務考慮我磁,可以選擇不部署夺艰。如果要實施持續(xù)部署,必須先實施持續(xù)交付。

四、持續(xù)部署(Continuous Deployment)

持續(xù)部署則是在持續(xù)交付的基礎上巷屿,把所有的變更自動部署到生產(chǎn)環(huán)境中嘱巾。

  • 通過以上步驟后篙螟,形成一個最終可以部署的版本(artifact)问拘,并將相關的版本打包成便于部署的文件包绪杏,如:tar.gz蕾久、jar 包僧著、war 包等霹抛,發(fā)布到生產(chǎn)環(huán)境杯拐。
  • 架設 nexus 私服從內網(wǎng)獲取下載依賴庫,使用 nexus 私服僅在依賴庫第一次獲取時需要從中央倉庫或其他 maven 倉庫中獲取顶滩,之后便可從內網(wǎng)獲取。生產(chǎn)服務器將打包文件仅醇,解包成本地的一個目錄,再將運行路徑的符號鏈接(symlink)指向這個目錄叶摄,然后重新啟動應用。這方面的部署工具有 Ansible唆铐、Chef顺少、Puppet 等脆炎。
  • 通過配置管理工具將相應的程序包和配置文件及相關命令或腳本發(fā)布到生產(chǎn)服務器,并根據(jù)相關的操作來完成這一部署過程氓辣。整個部署過程按照(如:ansible-playbook 執(zhí)行 playbook.yml 來完成)

五秒裕、持續(xù)集成操作流程

編碼 -> 構建 -> 整合 -> 測試 -> 交付 -> 部署 -> 回滾

  • 代碼編寫,完成代碼功能模塊钞啸。
  • 構建几蜻,實現(xiàn)功能模塊構建測試,保證該模塊當前的可用狀態(tài)体斩。
  • 測試梭稚,單元測試和集成測試,保證各個功能模塊的完整性和穩(wěn)定性絮吵。
  • 交付弧烤,建立在CI基礎上,讓軟件的構建蹬敲、測試與最終版本變得更快以及更頻繁暇昂。
  • 部署,是在持續(xù)交付的基礎上伴嗡,把部署到生產(chǎn)環(huán)境的過程自動化急波。
  • 回滾,一旦當前版本發(fā)生問題闹究,就要回滾到上一個版本的構建結果幔崖。最簡單的做法就是修改一下符號鏈接食店,指向上一個版本的目錄渣淤。
Docker + Jenkins + Git 發(fā)布 Java 項目持續(xù)構建案例

Java 項目開發(fā) -> 提交項目代碼 Git 容器 -> Jenkins 容器拉取項目代碼 -> Maven 編譯構建項目 -> Jenkins 發(fā)布項目到 Tomcat 容器 -> 測試

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赏寇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子价认,更是在濱河造成了極大的恐慌嗅定,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件用踩,死亡現(xiàn)場離奇詭異渠退,居然都是意外死亡,警方通過查閱死者的電腦和手機脐彩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門碎乃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惠奸,你說我怎么就攤上這事梅誓。” “怎么了佛南?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵梗掰,是天一觀的道長。 經(jīng)常有香客問我嗅回,道長及穗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任绵载,我火速辦了婚禮埂陆,結果婚禮上,老公的妹妹穿的比我還像新娘尘分。我一直安慰自己猜惋,他們只是感情好,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布培愁。 她就那樣靜靜地躺著著摔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪定续。 梳的紋絲不亂的頭發(fā)上谍咆,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音私股,去河邊找鬼摹察。 笑死,一個胖子當著我的面吹牛倡鲸,可吹牛的內容都是我干的供嚎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼克滴!你這毒婦竟也來了逼争?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤劝赔,失蹤者是張志新(化名)和其女友劉穎誓焦,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體着帽,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡杂伟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仍翰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赫粥。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖予借,靈堂內的尸體忽然破棺而出傅是,到底是詐尸還是另有隱情,我是刑警寧澤蕾羊,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布喧笔,位于F島的核電站,受9級特大地震影響龟再,放射性物質發(fā)生泄漏书闸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一利凑、第九天 我趴在偏房一處隱蔽的房頂上張望浆劲。 院中可真熱鬧,春花似錦哀澈、人聲如沸牌借。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膨报。三九已至,卻和暖如春适荣,著一層夾襖步出監(jiān)牢的瞬間现柠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工弛矛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留够吩,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓丈氓,卻偏偏與公主長得像周循,于是被迫代替她去往敵國和親强法。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容

  • <<互聯(lián)網(wǎng)敏捷DevOps和自動化之5.持續(xù)集成>>持續(xù)集成的價值是什么湾笛?對于開發(fā)和測試人員又意味著什么呢拟烫?1.1...
    燕京博士閱讀 2,776評論 0 5
  • 部署自動打包環(huán)境 概述 基于Gitlab-CICD配置的自動打包環(huán)境。 在Gitlab上創(chuàng)建Tag時迄本,會執(zhí)行包含D...
    Wurq閱讀 2,077評論 0 0
  • 打卡日期:2019年3月31日 90天打卡累計天數(shù):57\90 #宣言(如:帶著蝸牛去散步 ,慢以至遠)# 孩子第...
    拂曉的時光機閱讀 228評論 0 1
  • 天上的鳥和海里的魚不同 現(xiàn)在的你和過去的你不同 鳥兒會說話 魚兒會唱歌 你走了很多地方 聽了很多話 學會了騙人 騙...
    栗子妖閱讀 220評論 0 0
  • 知道報了這個夏令營课竣,我當時是激動的呀嘉赎,有CS,騎馬于樟,還有羅馬大戰(zhàn)公条,都是我喜歡玩兒的,平常也玩不到的迂曲“谐鳎可看著通知書上...
    藍蘇兒閱讀 275評論 0 0