瞭解CI/CD流水線

来源:https://www.cnblogs.com/zoeking001/archive/2022/09/28/16737454.html
-Advertisement-
Play Games

自動化流水線在CI/CD(持續集成/持續交付或持續部署)的實踐中發揮著核心作用。本文將對什麼是CI/CD流水線、如何構建CI/CD流水線進行討論。 *持續集成:Continuous Integration *持續交付:Continuous Delivery *持續部署:Continuous Depl ...


自動化流水線在CI/CD(持續集成/持續交付或持續部署)的實踐中發揮著核心作用。本文將對什麼是CI/CD流水線、如何構建CI/CD流水線進行討論。

*持續集成:Continuous Integration

*持續交付:Continuous Delivery

*持續部署:Continuous Deployment

 

01.什麼是CI/CD流水線?

CI/CD通過頻繁對更新的代碼進行檢查與嚴格測試並及時處理反饋,從而在保證軟體質量的前提下縮短交付所需時間。一般來說,可以通過不同的工具實現分階段的CI/CD,從而實現整體的工作流,但該流程極易被不可避免的人工干預打斷。因此,建立CI/CD流水線是很有必要的。

CI/CD流水線是指將開發直至部署的整體生態鏈的每一個步驟都通過流水線串聯起來並代碼化,使得開發流程能夠通過自動化流水線的形式變得更為高效、快速:只需將本地代碼發佈到測試環境,就可根據流水線走向判斷是否出現Bug併進行修正。 

自動化的CI/CD流水線可以加快開發流程並加速各方反饋迴圈,確保每個步驟的執行始終如一,使軟體自動、快速、持續的交付更加輕鬆。

 

02.如何構建CI/CD流水線

CI/CD流水線的最終形態取決於實際的產品類型及要求,但所有流水線使用的模式大致相同。

▲CI/CD流水線模式

 

在CI/CD流水線中,結果會被自動記錄並反饋通知給開發人員,使其能夠按需對工作流進行配置,以便快速重啟因故障而停止的進程,並通過測試策略配置(只有前面的測試成功通過後,才會運行更複雜的測試)來更有效地利用伺服器資源。完成自動化測試後,軟體通常會被部署在一系列的暫存環境中,一些被用於最終的功能測試,另一些被用於培訓和客戶演示等。

讓我們更詳細地瞭解一下每個階段的註意事項。

 

03.標誌和分支

代碼提交是CI/CD流水線的第一步,指將整個代碼庫放入版本控制系統(Version Control System,VCS)中,如Git、Mercurial或Perforce,開發團隊的每個成員都應養成即刻或頻繁提交自己代碼的習慣。

即刻或頻繁提交代碼是CI/CD流水線中的重要實踐步驟,但對於周期較長的大型開發項目來說,這其實是一柄雙刃劍:雖然可以快速得到新增代碼的反饋、減少影響進度的問題出現可能性,但由於流水線的末端是客戶,所以必須採取手段以避免客戶接觸到半成品功能或共用工作狀態。

功能標誌和分支可以解決這一問題。開發人員可以設置功能標誌以區分代碼可見環境,並指定僅團隊內部可見。功能分支指從主幹中剝離出共用分支進行單獨的功能開發,最終還是會觸發CI/CD流水線,這既能滿足開發需求,又可享受CI/CD帶來的便利。

 

04.構建和測試

在完成代碼提交並完成實例執行後,下一個階段便是構建和測試。如果有現成的自動化單元測試,通常會在此之前進行靜態分析檢查。

具體使用的構建工具(如Ant、Maven)及構建步驟取決於項目所使用的語言及框架。為避免因缺少依賴項而出現經典的“只能在我的電腦上工作”的情況,可以使用專用的構建伺服器,通過將生成的安裝包、二進位文件和一些編譯中間件部署到測試環境,並與流水線結合,即可進行更高級別的自動化測試:單元測試、集成測試、端到端測試甚至非功能測試都可同步運行。這不僅能夠縮短流水線耗時,還能實現更快的反饋迴圈。

 

05.虛擬機

想要保證自動化測試的結果準確可靠,必須確保測試流程的穩定性與一致性。

理想情況下,測試環境的配置應儘可能接近實際運行環境,併在測試運行時重置相關環境,以避免環境不一致導致測試結果有誤。長期以來,虛擬機 (Virtual Machine,VM) 一直是運行測試環境的常用選擇,常見的虛擬機有VMware、VirtualBox等。虛擬機既能模擬出與當前操作系統不同的運行環境,又能避免破壞性指令導致的系統受損。有些虛擬機甚至還具備快照功能,可以快速回到破損前狀態。

然而,構建新的虛擬機需要經歷依賴項的配置過程,細節極易被遺漏,從而影響構建過程。只要將代碼打包到容器即可避免疏漏產生。容器具備高可移植性,是應用程式層的抽象,指將代碼和依賴項打包到一起,更易於部署到不同的環境中,有助於確保流水線的高效運行。

 

06.部署

當代碼來到CI/CD流水線的部署步驟時,開發人員可以選擇手動部署或自動部署。手動部署(持續交付)可以控制新特性或新功能的發佈時間,部署過程涉及用戶的停機時間。而使用完全自動化的持續部署,新增代碼更改只需通過CI/CD流水線先前的所有階段,便會直接被部署。這意味著,之前因開發人員數量、提交頻率等因素受限的部署次數可以達到之前難以想象的每天數十次甚至上百次。

 

07.總結

CI/CD獲得認可的根本原因在於其實現了測試階段的左移,而構建CI/CD流水線則可更好地將其付諸實踐。根據實際的產品和框架來構建合適的CI/CD工作流,並選擇最能滿足配置需求的CI/CD平臺,對CI/CD工作流的實現大有助益。

SkyEye天目全數字實時模擬軟體,通過虛擬化技術模擬晶元,可以在PC機上運行嵌入式目標程式,減少搭建硬體測試環境的成本,使測試階段左移,從而縮短嵌入式軟體交付的開發周期。其內置的命令行工具可以控制模擬的運行與停止,與CI/CD平臺有著良好的可集成性。此外,SkyEye還提供豐富的自動化測試函數庫,提供記憶體和全局變數的查看及修改等功能,併在自動化測試完成後生成自動化測試報告,是嵌入式領域CI/CD實踐的最佳拍檔。

 

參考鏈接

https://www.jetbrains.com/teamcity/ci-cd-guide/ci-cd-pipeline/

原文鏈接:https://mp.weixin.qq.com/s/x5VOBZF0plfJyyR5zpoWkw


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

-Advertisement-
Play Games
更多相關文章
  • HTML 中的 JavaScript 前言 在上一篇文章"什麼是JavaScript?"中我們說到js作為一門和頁面交互的語言。那如何把網頁的主導語言HTML和JavaScript關聯起來呢?在js早期,網景公司創造出了<script>元素,用來講JavaScript插入到HTML中。 <scrip ...
  • 一、開發優化一 1.使用Vant Weapp 1.1 什麼是Vant Weapp Vant Weapp官網鏈接 Vant Weapp是有贊前端團隊開源的一套小程式UI組件庫,助力開發者快速搭建小程式應用。它所使用的是MIT開源許可協議,對商業使用比較友好。 1.2 安裝Vant Weapp組件庫 安 ...
  • 什麼是JavaScript? 前言 本文內容為 博主閱讀“紅寶書”之後的總結和個人理解,有什麼錯誤歡迎指正! 一句話概括語言的誕生 1995年,網景公司一位名叫Brendan Eich的工程師,開發了一個叫Mocha的腳本語言。後來改名叫 JavaScript,以便蹭當時大火的Java的熱度。 到底 ...
  • 方法:定位,外邊距,內邊距,層級,邊框; 一個元素; 兩個元素; 三個元素. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=e ...
  • 輸出100個hello world. for (var i = 1; i <= 100; i++) { console.log("hello world");} 創建一個包含1~100的數組. var array = [];for (var i = 1; i <= 100; i++) { array ...
  • @(vue2.x引入threejs) vue2.x引入threejs npm安裝 npm install three 使用指定版本: npm install three@<版本號> 其他插件 因為本次開發需要引入3D模型,所以需要使用 MTLLoader, OBJLoader兩種載入器,因為開發需求 ...
  • #背景 學習前端新框架、新技術。如果需要做一些資料庫的操作來增加demo的體驗(CURD流程可以讓演示的體驗根據絲滑) 最開始的時候一個演示程式我們會調用後臺,這樣其實有一點弊端,就是增加了開發和維護成本,簡單的一個demo不應該勞師動眾 後來我會在demo中使用一些websql,奈何,websql ...
  • 裝飾器 (1)什麼是裝飾器: 器指的是工具,可以定義成函數 裝飾指的是為其他事務添加額外的東西來點綴 上面兩者合到一起: 裝飾器指的是定義一個函數,該函數用來為其他函數添加額外的功能 函數裝飾器分為: 無參裝飾器和有參裝飾兩種,二者的實現原理一樣,都是’函數嵌套+閉包+函數對象’的組合使用的產物。 ...
一周排行
    -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版本說明 機器同時安裝了 ...