CI/CD和 DevOps還在傻傻分不清嗎?今日一文讓你通透

来源:https://www.cnblogs.com/jiagooushi/archive/2022/09/16/16699915.html
-Advertisement-
Play Games

基本概念 持續集成 (Continuous Intergration) ​ 持續集成的重點在於構建編譯及測試,開發人員每天要提交很多次代碼到分支,在分支合併到主幹前,需要通過編譯和測試識別出問題。持續集成的流程就是通過自動化的構建(主要是構建編譯、自動化測試)來驗證,從而儘早地發現集成錯誤。 持續集 ...


file

基本概念

持續集成

(Continuous Intergration)

​ 持續集成的重點在於構建編譯及測試,開發人員每天要提交很多次代碼到分支,在分支合併到主幹前,需要通過編譯和測試識別出問題。持續集成的流程就是通過自動化的構建(主要是構建編譯、自動化測試)來驗證,從而儘早地發現集成錯誤。

持續集成的核心意義:通過自動化測試儘早的發現代碼的問題。

file

持續交付

(Continuous Delivery):

​ 持續交付指的是將產品儘可能快的發佈上線的過程。持續交付是在持續集成基礎上的擴展,也就是說除了自動化編譯、自動化測試,為了儘快上線我們還需要自動化發佈流程,整個流程實現後,根據實際需要,可以周期性的進行產品上線發佈,上線方式為人工點擊部署實現快速上線。部署環境的先後部署順序,一般在公司都是開發環境、測試環境、預發佈環境(類生產環境)和正式生產環境,如果代碼在預發佈環境測試通過,那麼就可通過手動的方式部署生產環境實現上線的目的。

持續交付的核心意義:儘快的將最終的產品發佈到線上環境,給用戶使用。持續交付是每個企業追求的目標,我們常說的CI/CD里的CD一般指的就是持續交付。

file

持續部署

(Continuous Deployment):

​ 持續部署就是在持續交付的基礎上,將編譯、測試、打包部署到生產環境的過程做成自動化。

​ 持續部署的核心意義:持續的將迭代的需求自動化的方式部署到生產環境。一般來說,非生產環境的持續部署基本都能實現。但生產環境的持續部署並不是每個企業都能做到,主要原因是受限於各種系統功能依賴、自動化測試不完善等因素,自動化一旦部署到生產,將可能造成嚴重生產事故。

file

說明:無論是持續集成、持續交付還是持續部署,如果要實現整個流程,基本上離不開CI伺服器。

持續集成

特點
  • 快速定位錯誤,測試環節可以及時暴露問題;
  • 避免大幅度偏離主幹,藉助統一的代碼庫;
  • 減少不必要的成本投入,可以自動化解決的重覆乏味的事情,沒必要浪費人力和時間;
工作流程

file

工作階段

持續集成工作流程大體包括這麼幾個階段:

  • 初始化CI流程

    基本的CI流程的配置,比如腳本、定時任務等。

  • 拉取最新代碼

    從源碼倉庫拉取最新代碼到構建伺服器磁碟上。

  • 構建

    一般源碼倉庫自包含構建,可通過配置的腳本觸發執行構建。比如Java的構建一般基於Maven或Gradle。

  • 執行測試

    測試階段一般包含單元測試和集成測試。Java中的單元測試常指JUnit。

  • 結果處理

    CI流程執行的最後結果要麼是成功,要麼是失敗,結果需要通知給對應的人員,一般的通知方式有郵件、釘釘、簡訊。

集成工具
  • Travis CI

  • Bamboo

  • TeamCity

  • CircleCI

  • Gitlab CI

  • Jenkins

DevOps

概念

DevOps這個詞,其實就是Development(開發)和Operation(運維)兩個詞的組合。

​ DevOps 不是一項技術,也不是一套流程和方法論,更不是一套簡單的工具產品。DevOps的維基百科定義是這樣的:DevOps是一組過程、方法與系統的統稱,用於促進開發、技術運營(運維)和質量保證(QA)部門之間的溝通、協作與整合。

​ 通過實踐 DevOps,可以將開發、測試、運維之間的工作串聯起來,以持續構建、自動化測試、持續發佈為目標,將所有流程全部自動化,最大化減少了重覆性的人力投入。同時,基礎環境的自動化構建也降低了由於人的原因帶來的意外風險。下圖為DevOps所包含的流程:

file

​ DevOps 這個詞是Patrick Debois 於2009 年創造的。出生於比利時的Patrick 先生曾經是一名苦悶的IT 咨詢師,飽受開發和運維相互割裂及傷害之苦。2009 年他參加了一個技術大會,在會上聽了名為10+ Deploys Per Day: Dev and Ops Cooperation at Flickr 的演講,深受啟發,並創造了DevOps 這個詞。

​ 目前,DevOps處於高速增長的階段。尤其是在大企業中,DevOps受到了廣泛的歡迎。越大的企業,越喜歡DevOps。包括Adobe、Amazon、Apple、Airbnb、Ebay、Etsy、Facebook、LinkedIn、Netflix、NASA、Starbucks、Walmart、Sony等公司,都在採用DevOps。

工具鏈

​ 由於DevOps是一種跨職能的工作模式,因此實踐過程需要使用不同的工具集(被稱為 "工具鏈"),而不是單一的工具集。這些工具鏈應該符合以下一個或多個類別,這些類別反映了開發和交付過程中的關鍵環節:

  • 編碼---代碼開發和審查、源代碼管理工具、代碼合併

  • 構建---持續集成工具,構建狀態

  • 測試---持續測試工具,提供快速、及時的業務風險反饋

  • 發佈---變更管理、發佈審批、發佈自動化

  • 配置---基礎設施配置和管理,基礎設施作為代碼工具的基礎設施

  • 監控---應用性能監控、終端用戶體驗

DevOps生態圈工具鏈圖:
file

常用工具

​ DevOps 需要要通過技術工具鏈完成持續集成、持續交付、用戶反饋和系統優化的整合。工具鏈包括版本控制&協作開發工具、自動化構建和測試工具、持續集成&交付工具、部署工具、維護工具、監控,警告&分析工具等等。

  • 版本控制&協作開發:GitHub、GitLab、BitBucket、SubVersion、Coding、Bazaar
  • 自動化構建和測試:Apache Ant、Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、PHPUnit
  • 持續集成&交付:Jenkins、Capistrano、BuildBot、Fabric、Tinderbox、Travis CI、flow.ci Continuum、LuntBuild、CruiseControl、Integrity、Gump、Go
  • 容器平臺:Docker、Rocket、Ubuntu(LXC)、第三方廠商如(AWS/阿裡雲)
  • 配置管理:Chef、Puppet、CFengine、Bash、Rudder、Powershell、RunDeck、Saltstack、Ansible
  • 微服務平臺:OpenShift、Cloud Foundry、Kubernetes、Mesosphere
  • 服務開通:Puppet、Docker Swarm、Vagrant、Powershell、OpenStack Heat
  • 日誌管理:Logstash、CollectD、StatsD
  • 監控,警告&分析:Nagios、Ganglia、Sensu、zabbix、ICINGA、Graphite、Kiban
DevOps的目標
  • 更快的上市時間

  • 提高部署頻率

  • 更短的修複時間

  • 降低發佈失敗率

  • 更快的平均恢復時間

總結來說DevOps的目標是最大限度地提高運營流程的可預測性、效率、安全性和可維護性。

小結

兩者關係
  • 由DevOps的流程和工具鏈我們可以得知,DevOps 是持續集成思想的延伸

  • 持續集成/部署是 DevOps 的技術核心,在沒有自動化測試、持續集成/部署之下,DevOps就是空中樓閣。

本文由傳智教育博學谷教研團隊發佈。

如果本文對您有幫助,歡迎關註點贊;如果您有任何建議也可留言評論私信,您的支持是我堅持創作的動力。

轉載請註明出處!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我的設計模式之旅,本節使用抽象工廠模式實現阿迪達斯、耐克品牌服飾生產,分別用C#跟Golang實現。對抽象方法模式進行了細緻的介紹。 ...
  • 享元模式(Flyweight Pattern)主要用於減少創建對象的數量,以減少記憶體占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的方式。 ...
  • 摘要:別名分析是編譯器理論中的一種技術,用於確定存儲位置是否可以以多種方式訪問。 本文分享自華為雲社區《編譯器優化那些事兒(6):別名分析概述》,作者:畢昇小助手。 1.簡介 別名分析是編譯器理論中的一種技術,用於確定存儲位置是否可以以多種方式訪問。如果兩個指針指向相同的位置,則稱這兩個指針為別名。 ...
  • 《阿裡巴巴Java開發手冊》的願景是碼出高效,碼出質量。它結合作者的開發經驗和架構歷程,提煉阿裡巴巴集團技術團隊的集體編程經驗和軟體設計智慧,濃縮成為立體的編程規範和最佳實踐 《碼出高效:Java 開發手冊》源於影響了全球250萬名開發工程師的《阿裡巴巴Java開發手冊》,作者靜心沉澱,對Java規... ...
  • 目錄 一.OpenGL ES 版本 二.嵌入式設備的 OpenGL ES 版本 三.不同 OpenGL ES GLSL 腳本區別 1.OpenGL ES 1.0 不支持腳本 2.OpenGL ES 2.0 GLSL 腳本 3.OpenGL ES 3.0 GLSL 腳本 四.OpenGL ES 和 O ...
  • 首先推薦《高性能 MySQL》,這本書是 MySQL 領域的經典之作,擁有廣泛的影響力。不但適合資料庫管理員(DBA)閱讀,也適合開發人員參考學習。不管是資料庫新手還是專家,都能從本書中有所收穫。 其次如果你對 MySQL 的內部原理有興趣的話,可以看一下這本書《MySQL 技術內幕:InnoDB ... ...
  • 如果你是準備自學Python或者正在學習,你應該能用得上: ① Python所有方向的學習路線圖,清楚各個方向要學什麼東西 ② 80多節Python課程視頻,涵蓋必備基礎、爬蟲和數據分析 ③ 100多個Python項目源碼,學習不再是只會理論 ④ 龍叔寫的獨家Python圖文教程,手機也能學習 ⑤ ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 又到了學Python時刻~ 第三方模塊: requests >>> pip install requests 如果安裝python第三方模塊: win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip instal ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...