持續集成和持續交付

引言

CI/CD 是一種通過在應用開發階段引入自動化來頻繁向客戶交付應用的方法。CI/CD 的核心概念是持續集成、持續交付和持續部署。作為一種面向開發和運維團隊的解決方案,CI/CD 主要針對在集成新代碼時所引發的問題(亦稱:“集成地獄”)。

具體而言,CI/CD 可讓持續自動化和持續監控貫穿于應用的整個生命周期(從集成和測試階段,到交付和部署)。這些關聯的事務通常被統稱為“CI/CD 管道”,由開發和運維團隊以敏捷方式協同支持,采用的方法不是?DevOps?就是站點可靠性工程(SRE)。

一、CI/CD簡介:

1. 持續集成(CI)

CI是指在代碼倉庫中的每次提交都自動觸發構建和測試流程,確保新代碼與現有代碼的集成不會破壞應用的穩定性。現代應用開發的目標是讓多位開發人員同時處理同一應用的不同功能。但是,如果企業安排在一天內將所有分支源代碼合并在一起(稱為“合并日”),最終可能造成工作繁瑣、耗時,而且需要手動完成。這是因為當一位獨立工作的開發人員對應用進行更改時,有可能會與其他開發人員同時進行的更改發生沖突。如果每個開發人員都自定義自己的本地集成開發環境(IDE),而不是讓團隊就一個基于云的 IDE 達成一致,那么就會讓問題更加雪上加霜。

持續集成(CI)可以幫助開發人員更加頻繁地(有時甚至每天)將代碼更改合并到共享分支或“主干”中。一旦開發人員對應用所做的更改被合并,系統就會通過自動構建應用并運行不同級別的自動化測試(通常是單元測試和集成測試)來驗證這些更改,確保這些更改沒有對應用造成破壞。這意味著測試內容涵蓋了從類和函數到構成整個應用的不同模塊。如果自動化測試發現新代碼和現有代碼之間存在沖突,CI 可以更加輕松地快速修復這些錯誤。

2. 持續交付(CD)

CD建立在CI的基礎上,它的目標是自動化從構建到部署的整個交付過程,以便在任何時候都可以快速、可靠地將軟件推送到生產環境。

完成 CI 中構建及單元測試和集成測試的自動化流程后,持續交付可自動將已驗證的代碼發布到存儲庫。為了實現高效的持續交付流程,務必要確保 CI 已內置于開發管道。持續交付的目標是擁有一個可隨時部署到生產環境的代碼庫。

在持續交付中,每個階段(從代碼更改的合并,到生產就緒型構建版本的交付)都涉及測試自動化和代碼發布自動化。在流程結束時,運維團隊可以快速、輕松地將應用部署到生產環境中。

3. 持續部署(CD)

對于一個成熟的 CI/CD 管道來說,最后的階段是持續部署。作為持續交付——自動將生產就緒型構建版本發布到代碼存儲庫——的延伸,持續部署可以自動將應用發布到生產環境。由于在生產之前的管道階段沒有手動門控,因此持續部署在很大程度上都得依賴精心設計的測試自動化。

實際上,持續部署意味著開發人員對云應用的更改在編寫后的幾分鐘內就能生效(假設它通過了自動化測試)。這更加便于持續接收和整合用戶反饋。總而言之,所有這些 CI/CD 的關聯步驟都有助于降低應用的部署風險,因此更便于以小件的方式(而非一次性)發布對應用的更改。不過,由于還需要編寫自動化測試以適應 CI/CD 管道中的各種測試和發布階段,因此前期投資還是會很大。

二、CI/CD關鍵步驟:

  1. 代碼管理: 使用版本控制系統,如Git,確保代碼的版本和變更都能被追蹤。
  2. 自動化構建: 使用構建工具,如Jenkins、Travis CI等,自動化執行構建和單元測試。
  3. 自動化測試: 包括單元測試、集成測試和端到端測試,以確保代碼質量。
  4. 持續交付: 制定自動化的部署流程,使得每次通過CI的代碼變更都能快速而安全地部署到生產環境。
  5. 監控與反饋: 設置監控系統,追蹤應用性能和問題,同時建立反饋機制,及時發現并修復構建和部署的問題。

三、?Netflix Tech Stack (CI/CD Pipeline)

  1. 規劃:Netflix Engineering 使用 JIRA 進行規劃,使用 Confluence 進行文檔編寫。
  2. 編碼:Java 是后端服務的主要編程語言,而其他語言用于不同的用例。
  3. 構建:主要使用 Gradle 進行構建,并構建了 Gradle 插件以支持各種用例。
  4. 打包:將包和依賴項打包成 Amazon Machine Image (AMI) 進行發布。
  5. 測試:測試強調了生產文化對構建混沌工具的關注。
  6. 部署:Netflix 使用其自建的 Spinnaker 進行金絲雀發布部署。
  7. 監控:監控指標集中在 Atlas 中,使用 Kayenta 來檢測異常。
  8. 事故報告:根據優先級分派事故,使用 PagerDuty 進行事故處理。

四、常用的 CI/CD 工具有哪些?

CI/CD 工具可以協助團隊自動進行開發、部署和測試。有些工具專門處理集成(CI)方面的問題,有些工具負責管理開發和部署(CD)工作,而另外一些工具則專注于持續測試或相關功能。

針對 CI/CD 的最著名的開源工具之一就是自動化服務器 Jenkins。從簡單的 CI 服務器到完整的 CD 集線器,Jenkins 都可以處理。

在紅帽 OpenShift 上部署 Jenkins

Tekton Jenkins 是一個面向 Kubernetes 平臺的 CI/CD 框架,可通過容器為您提供標準的云原生 CI/CD 體驗。

在紅帽 OpenShift 上部署 Jenkins

除了 Jenkins 和 Tekton Pipelines,您可能想要研究的其他開源 CI/CD 工具包括:

  • Spinnaker,一個面向多云環境構建的 CD 平臺。

  • GoCD,一個側重于建模和可視化呈現的 CI/CD 服務器。

  • Concourse, “一個開源的持續作業器”。

  • Screwdriver,一個面向 CD 設計的構建平臺。

此外,團隊也可考慮使用托管式 CI/CD 工具,它們可從不同供應商處獲得。主流公共云提供商全部提供 CI/CD 解決方案,以及?GitLab、CircleCI、Travis CI、Atlassian Bamboo?及眾多其他工具。

此外,任何工具只要是 DevOps 的基本工具,就有可能屬于 CI/CD 流程的一部分。用于配置自動化(如?Ansible、Chef?和?Puppet)、容器運行時(如?Docker、rkt?和?cri-o)以及容器編排(如?Kubernetes)的工具嚴格來說不算是 CI/CD 工具,但它們也現身于許多 CI/CD 工作流中。

根據您首選的應用開發策略和云提供商,您可以采用多種不同的方法來實施 CI/CD。AWS 上的紅帽 ? OpenShift? 服務有多個選項可讓您自己的 CI/CD 工作流程變得更輕松,例如?Tekton 和 OpenShift Pipelines。通過使用紅帽 OpenShift,企業組織可以利用 CI/CD 跨多個本地和云平臺自動構建、測試和部署應用。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209035.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209035.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209035.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

力扣刷題筆記——反轉鏈表

力扣(LeetCode)官網 - 全球極客摯愛的技術成長平臺 經典問題反轉鏈表 這里給出四種解法 1.雙指針 這種方法是用一個next指針記錄當前節點的下一個節點,一個pre指針記錄當前節點的前一個節點。 只需要遍歷一遍鏈表就可以完成鏈表的反轉 c…

idea__SpringBoot微服務05——JSR303校驗(新注解)(新的依賴),配置文件優先級,多環境切換

JSR303校驗,配置文件優先級,多環境切換 一、JSR303數據校驗二、配置文件優先級三、多環境切換一、properties多環境切換二、yaml多環境切換————————創作不易,如覺不錯,隨手點贊,關注,收藏(*&#x…

電腦待機怎么設置?讓你的電腦更加節能

在日常使用電腦的過程中,合理設置待機模式是一項省電且環保的好習慣。然而,許多用戶對于如何設置電腦待機感到困擾。那么電腦待機怎么設置呢?本文將深入探討三種常用的電腦待機設置方法,通過詳細的步驟,幫助用戶更好地…

【C語言期末】題目+筆記

文章目錄 題目1.下面哪個不是C語言的基本數據類型?( B )2.C語言的標識符應以字母或( A )開頭。3.如果需要在C程序里調用標準函數庫中的printf函數,則應該在程序的開頭包含哪個頭文件?&#xff0…

【數據結構】順序表的定義和運算

目錄 1.初始化 2.插入 3.刪除 4.查找 5.修改 6.長度 7.遍歷 8.完整代碼 🌈嗨!我是Filotimo__🌈。很高興與大家相識,希望我的博客能對你有所幫助。 💡本文由Filotimo__??原創,首發于CSDN📚。 &…

web前端開發html/css練習

目標圖&#xff1a; 素材&#xff1a; 代碼&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"…

使用RSA工具進行對信息加解密

我們在開發中需要對用戶敏感數據進行加解密&#xff0c;比如密碼 這邊科普一下RSA算法 RSA是非對稱加密算法&#xff0c;與對稱加密算法不同;在對稱加密中&#xff0c;相同的密鑰用于加密和解密數據,因此密鑰的安全性至關重要;而在RSA非對稱加密中&#xff0c;有兩個密鑰&…

【USRP】5G / 6G OAI 系統 5g / 6G OAI system

面向5G/6G科研應用 USRP專門用于5G/6G產品的原型開發與驗證。該系統可以在實驗室搭建一個真實的5G 網絡&#xff0c;基于開源的代碼&#xff0c;專為科研用戶設計。 軟件無線電架構&#xff0c;構建真實5G移動通信系統 X410 采用了目前流行的異構式系統&#xff0c;融合了FP…

SQLite基本使用

目錄 1. 概述2. 引入SQLite3. 連接數據庫創建游標4. 創建數據庫文件5. 新增單條數據6. 批量新增數據7. 查詢單條數據8.查詢全部數據9. 查詢指定條數的數據10. 修改數據11. 刪除數據12. 事務回滾13. 關閉數據庫關閉游標1. 概述 SQLite是一個進程內的庫,實現了自給自足的、無服務…

【嵌入式開發 Linux 常用命令系列 4.2 -- .repo 各個目錄介紹】

文章目錄 概述.repo 目錄結構manifests/default.xmlManifest 文件的作用default.xml 文件內容示例linkfile 介紹 .repo/projects 子目錄配置和管理configHEADhooksinfo/excludeobjectsrr-cache 工作區中的對應目錄 概述 repo 是一個由 Google 開發的版本控制工具&#xff0c;它…

使用 OMSA 和 OME 工具管理多個服務器

文章目錄 Dell Remote Access Controller (iDRAC)OpenManage Server Administrator&#xff08;OMSA&#xff09;OpenManage EnterpriseSupportAssist Enterprise推薦閱讀 在DELL服務器的管理工具中&#xff0c;有多個管理工具&#xff0c;今天我們將分享這幾個工具的關聯性以及…

2023-12-08 工作心得

1 別名不能作為 同一個sql里的where里條件約束 因為別名是在查詢結果生成后才得到的&#xff0c;而 WHERE 子句是在查詢結果生成前進行的篩選操作&#xff0c;所以別名不能直接用于 WHERE 子句中的條件篩選。 2 jpa sql里如果是刪除或修改&#xff0c;加注解 modifying transa…

STM32的幾個深入功能

STM32的幾個深入功能 目錄 1、時鐘源2、鎖相環3、備份SRAM4、low power mode5、DMA Flash RAM6、復位類型7、CMSIS8、STM32F4學習方法9、中斷10、8080 并行接口11、FSMC12、ADC13、IIC14、SPI15、48516、CAN17、MPU6050六軸傳感器18、NRF24L01 2.4G無線模塊19、FLASH20、外部SR…

【Git系列】branch和tag

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

將單體應用程序遷移到微服務

多年來&#xff0c;我處理過多個單體應用&#xff0c;并將其中一些遷移到了微服務架構。我打算寫下我所學到的東西以及我從經驗中用到的策略&#xff0c;以實現成功的遷移。在這篇文章中&#xff0c;我將以AWS為例&#xff0c;但基本原則保持不變&#xff0c;可用于任何類型的基…

云原生系列1

1、虛擬機集群環境準備 VirtualBox類似vmware的虛擬化軟件&#xff0c;去官網https://www.virtualbox.org/下載最新版本免費的&#xff0c;VirtualBox中鼠標右ctrl加home跳出鼠標到wins中。 VirtualBox安裝步驟 https://blog.csdn.net/rfc2544/article/details/131338906 cent…

微信小程序:button微信開放能力打開客服會話分享到聊天框

文檔 https://developers.weixin.qq.com/miniprogram/dev/component/button.html 打開客服會話 按鈕關鍵屬性 open-type"contact"功能按鈕 <button class"mo-open-type"open-type"contact"> </button>分享 <button class&q…

Hive HWI 配置

前言 1、下載安裝好hive后&#xff0c;發現hive有hwi界面功能&#xff0c;研究下是否可以運行&#xff0c;于是使用hive –service hwi命令啟動hwi界面報錯。 啟動hwi功能 2、訪問192.168.126.110:9999/hwi&#xff0c;發現訪問錯誤 一、HWI介紹 HWI&#xff08;Hive Web Int…

【前端】CSS基礎(學習筆記)

一、簡介 1、HTML局限性 HTML只關注內容的語義&#xff0c;但是丑&#xff01; 2、CSS概要 CSS 是層疊樣式表 ( Cascading Style Sheets ) 的簡稱&#xff0c;有時我們也會稱之為 CSS 樣式表或級聯樣式表。 CSS 是也是一種標記語言 CSS 主要用于設置 HTML 頁面中的文本內…

blender 粒子系統 roughness 屬性

粒子系統中的Roughness是一種用來控制粒子的隨機性和不規則性的屬性&#xff0c;它可以影響粒子的發射方向、速度、大小、旋轉等。Roughness有以下幾個子屬性&#xff1a; - **Uniform**&#xff1a;這個屬性用來控制粒子的發射方向的隨機性&#xff0c;即粒子在法線方向上的偏…