瞭解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
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...