瞭解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 [email protected]<版本號> 其他插件 因為本次開發需要引入3D模型,所以需要使用 MTLLoader, OBJLoader兩種載入器,因為開發需求 ...
  • #背景 學習前端新框架、新技術。如果需要做一些資料庫的操作來增加demo的體驗(CURD流程可以讓演示的體驗根據絲滑) 最開始的時候一個演示程式我們會調用後臺,這樣其實有一點弊端,就是增加了開發和維護成本,簡單的一個demo不應該勞師動眾 後來我會在demo中使用一些websql,奈何,websql ...
  • 裝飾器 (1)什麼是裝飾器: 器指的是工具,可以定義成函數 裝飾指的是為其他事務添加額外的東西來點綴 上面兩者合到一起: 裝飾器指的是定義一個函數,該函數用來為其他函數添加額外的功能 函數裝飾器分為: 無參裝飾器和有參裝飾兩種,二者的實現原理一樣,都是’函數嵌套+閉包+函數對象’的組合使用的產物。 ...
一周排行
    -Advertisement-
    Play Games
  • 經常看到有群友調侃“為什麼搞Java的總在學習JVM調優?那是因為Java爛!我們.NET就不需要搞這些!”真的是這樣嗎?今天我就用一個案例來分析一下。 昨天,一位學生問了我一個問題:他建了一個預設的ASP.NET Core Web API的項目,也就是那個WeatherForecast的預設項目模 ...
  • 很多軟體工程師都認為MD5是一種加密演算法,然而這種觀點是不對的。作為一個 1992 年第一次被公開的演算法,到今天為止已經被髮現了一些致命的漏洞。本文討論MD5在密碼保存方面的一些問題。 ...
  • Maven可以使我們在構建項目時需要用到很多第三方類jar包,如下一些常用jar包 而maven的出現可以讓我們避免手動導入jar包出現的某些問題,它可以自動下載那須所需要的jar包 我們只需要在創建的maven項目自動生成的pom.xml中輸入如下代碼 <dependencies> <!--ser ...
  • 來源:https://developer.aliyun.com/article/694020 非同步調用幾乎是處理高併發Web應用性能問題的萬金油,那麼什麼是“非同步調用”? “非同步調用”對應的是“同步調用”,同步調用指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步調 ...
  • 1.面向對象 面向對象編程是在面向過程編程的基礎上發展來的,它比面向過程編程具有更強的靈活性和擴展性,所以可以先瞭解下什麼是面向過程編程: 面向過程編程的核心是過程,就是分析出實現需求所需要的步驟,通過函數一步一步實現這些步驟,接著依次調用即可,再簡單理解就是程式 從上到下一步步執行,從頭到尾的解決 ...
  • 10瓶毒藥其中只有一瓶有毒至少需要幾隻老鼠可以找到有毒的那瓶 身似浮雲,心如飛絮,氣若游絲。 用二分查找和二進位位運算的思想都可以把死亡的老鼠降到最低。 其中,二進位位運算就是每一隻老鼠代表一個二進位0或1,0就代表老鼠存活,1代表老鼠死亡;根據數學運算 23 = 8、24 = 16,那麼至少需要四 ...
  • 一、Kafka存在哪些方面的優勢 1. 多生產者 可以無縫地支持多個生產者,不管客戶端在使用單個主題還是多個主題。 2. 多消費者 支持多個消費者從一個單獨的消息流上讀取數據,而且消費者之間互不影響。 3. 基於磁碟的數據存儲 支持消費者非實時地讀取消息,由於消息被提交到磁碟,根據設置的規則進行保存 ...
  • 大家好,我是陶朱公Boy。 前言 上一篇文章《關於狀態機的技術選型,最後一個真心好》我跟大家聊了一下關於”狀態機“的話題。從眾多技術選型中我也推薦了一款阿裡開源的狀態機—“cola-statemachine”。 於是就有小伙伴私信我,自己項目也考慮引入這款狀態機,但網上資料實在太少,能不能系統的介紹 ...
  • 使用腳本自動跑實驗(Ubuntu),將實驗結果記錄在文件中,併在實驗結束之後將結果通過郵件發送到郵箱,最後在windows端自動解析成excel表格。 ...
  • 話說在前面,我不是小黑子~ 我是超級大黑子😏 表弟大周末的跑來我家,沒事幹天天騷擾我,搞得我都不能跟小姐姐好好聊天了,於是為了打發表弟,我決定用Python做一個小游戲來消耗一下他的精力,我思來想去,決定把他變成小黑子,於是做了一個坤坤打籃球的游戲,沒想到他還挺愛玩的~ 終於解放了,於是我把游戲寫 ...