瞭解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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...