什么是持續集成(CI)/持續交付(CD)管道?
譯文【51CTO.com快譯】持續集成(CI)/持續交付(CD)管道是一系列步驟,其中包括從CI/CD流程開始的所有階段,并負責創建自動化和無縫的軟件交付。而使用CI/CD管道,軟件發布工件可以從代碼檢入階段到測試、構建、部署和生產階段一直在管道中前進。這一概念之所以強大,是因為一旦指定了管道,就可以將其部分或全部實現自動化,從而加快了流程,并減少了錯誤。換句話說,CI/CD管道使組織每天更輕松地自動多次交付軟件。
DevOps工程師往往會因為CI/CD中各個階段的自動化而與CI/CD管道混淆。雖然不同的工具可以使CI/CD中的各個復雜階段實現自動化,但由于人工干預,CI/CD的整個軟件供應鏈仍然可能被中斷。以下將探討持續集成(CI)/持續交付(CD)流程的各個階段,以及為什么CI/CD管道對于組織以快速和大規模的方式交付代碼至關重要的原因。
CI/CD階段:了解人員、流程和技術
組織應用程序開發團隊通常由開發人員、測試人員/質量保證(QA)工程師、運營工程師和站點可靠性工程師(SRE)或IT運營團隊組成。他們緊密合作,將高質量的軟件交付到客戶手中。持續集成(CI)/持續交付(CD)是兩個獨立過程的組合:持續集成和持續交付。以下列出了CI/CD管道中的主要步驟。
持續集成(CI):代碼提交
持續集成(CI)是構建軟件并完成初始測試的過程。持續交付(CD)是將代碼與基礎設施相結合的過程,確保完成所有測試并遵循策略,然后將代碼部署到預期的環境中。當然,許多組織都有自己的流程,但主要步驟如下所示:
- 人員:開發人員和工程師、數據庫管理員(DBA)、基礎設施團隊。
- 技術:GitHub、Gitlab、SVM、BitBucket。
- 過程:
代碼提交階段也稱為版本控制。提交是將開發人員編寫的最新更改發送到存儲庫的操作。開發人員編寫的每一個版本的代碼都是無限期存儲的。在與合作者討論和審查更改之后,開發人員將編寫代碼,并在軟件需求、功能增強、錯誤修復或更改請求完成后提交。管理編輯和提交更改的存儲庫稱為源代碼管理(SCM工具)。開發人員在提交代碼(代碼推送請求)后,代碼更改將合并到存儲在中心存儲庫(如GitHub)中的基本代碼分支中。
持續集成(CI):靜態代碼分析
- 人員:開發人員和工程師、數據庫管理員(DBA)、基礎設施團隊、測試人員。
- 技術:GitHub、Gitlab、SVM、BitBucket。
- 過程:
開發人員編寫代碼并將其推送到存儲庫后,系統將自動觸發以啟動下一個代碼分析過程。想象一下這樣一個步驟:提交的代碼可以直接構建,而在構建或交付期間失敗。就機器和人力的資源利用率而言,這都是一個成本昂貴的緩慢過程。組織必須檢查代碼中的靜態策略,靜態應用程序安全測試(SAST)是一種白盒測試方法,可以使用SonarQube、Veracode、Appscan等SAST工具從內部檢查代碼,以發現軟件缺陷、漏洞和弱點(例如SQL注入等)。這是一個快速檢查過程,其中檢查代碼是否存在語法錯誤。盡管此階段缺少檢查運行時錯誤的功能,但該功能將在以后的階段中執行。
將其他策略檢查放入自動管道中可以顯著地減少在該過程中發現的錯誤數量。
持續集成(CI):構建
- 人員:開發人員和工程師。
- 技術:Jenkins、Bamboo CI、Circle CI、Travis CI、Maven、Azure DevOps。
- 過程:持續集成(CI)過程的目標是進行常規代碼提交并不斷構建二進制工件。持續集成過程通過檢查添加的新模塊是否與現有模塊配合良好,有助于更快地發現錯誤。這有助于減少驗證新代碼更改的時間。生成工具根據用于編寫源代碼的編程語言來幫助編譯和創建可執行文件或程序包(.exe、.dll、.jar等)。在交付期間,還將生成SQL腳本,然后與基礎設施配置文件一起對其進行測試。總之,構建階段就是編譯應用程序的階段。作為構建過程一部分的其他子活動是工件存儲、構建驗證和單元測試。
構建驗證測試(BVT)/煙霧測試和單元測試:
創建構建后立即執行煙霧測試。構建驗證測試(BVT)檢查所有模塊是否正確集成,以及程序的關鍵功能是否正常運行。測試的目的是放棄嚴重損壞的應用程序,以使質量保證團隊不會浪費時間安裝和測試軟件應用程序。
在這些檢查之后,將單元測試(UT)添加到管道中,以進一步減少生產中的故障。單元測試測試開發人員編寫的代碼的各個單元或組件,以驗證它們是否按預期執行。
工件存儲:
一旦準備好構建,數據包就存儲在一個稱為工件或存儲庫工具的集中位置或數據庫中。每天可能會生成很多構建,并且跟蹤所有構建可能會很困難。因此,一旦生成并驗證構建,它就被發送到存儲庫進行存儲。存儲庫工具(如Jfrog Artifactory)用于存儲二進制文件,如.rar、.war、.exe、Msi等。在此,測試人員可以通過人工選擇,并在測試環境中部署工件以進行測試。
持續集成(CI):測試階段
- 人員:測試人員、質量檢查工程師。
- 技術:Selenium、Appium、Jmeter、SOAP UI,、Tarantula。
- 過程:發布構建過程后,通過一系列自動測試將驗證代碼的準確性。這一階段可幫助避免生產中的錯誤。根據構建的規模,這種檢查可能持續數秒至數小時。對于由多個團隊提交和構建代碼的大型組織來說,這些檢查在并行環境中運行的,以節省寶貴的時間,并盡早將錯誤通知開發人員。
這些自動化測試由測試人員(或質量保證工程師)設置,他們根據用戶案例設置了測試用例和場景。他們執行回歸分析和壓力測試以檢查與預期輸出的偏差。測試涉及的活動包括健全性測試、集成測試、壓力測試。這是一種非常高級的測試。在這里,可以發現開發人員可能未知的問題。
集成測試:
集成測試是使用諸如Cucumber、Selenium等工具執行的,其中將單個應用程序模塊組合并作為一組進行測試,同時評估是否符合指定的功能需求。在集成測試之后,需要有人批準該組中的更新集應該移動到下一階段,這通常是性能測試。這種核查過程可能很繁瑣,但它是整個過程的重要組成部分。在測試過程中出現了一些新的解決辦法。
負載平衡和壓力測試:
負載平衡和壓力測試也使用自動化測試工具(如Selenium、JMeter等)執行,以檢查應用程序運行是否穩定,并且在高流量環境下是否良好。由于全面的壓力測試是長期運行的,因此通常不會在每次更新上運行這一測試。當要發布主要的新功能時,將對多個更新進行分組,并完成完整性能測試。如果將單個更新移動到下一階段,則管道可能包括金絲雀測試作為替代。
- 人員:基礎設施工程師、站點可靠性工程師(SRE)、運營工程師。
- 技術:Spinnaker、Argo CD、Tekton CD。
- 過程:在測試階段完成之后,標準的代碼準備部署到服務器中,這些代碼將與主要應用程序集成。在部署到生產中之前,他們將被部署到測試/暫存或產品團隊內部使用的測試環境中。在將構建移動到這些環境之前,構建必須經過兩個子庫,其名稱為Bake和Deploy。這兩個階段都是Spinnaker所固有的。
持續交付(CD):Bake
Bake是指從源代碼中創建一個不可變的映像實例,該實例在生產環境中具有當前配置。這些配置可能是數據庫更改和其他基礎設施更新之類的內容。Spinnaker可以觸發Jenkins來執行這個任務,而有些組織更喜歡使用Packer。
持續交付(CD):Deploy
Spinnaker自動將Bake的映像傳遞到Deploy階段。這是將服務器組設置為部署到集群的位置。與上述測試過程類似,在Deploy階段執行功能相同的過程,首先轉移到測試階段,然后轉移到產品環境,最后進行批準和檢查。其整個過程由Spinnaker之類的工具處理。
持續交付(CD):驗證
這也是組織的團隊優化整個CI/CD流程的關鍵位置。因為現在已經進行了大量的測試,所以失敗很少見。但是,此時必須盡快解決所有故障,以最大程度地減少對最終客戶的影響。團隊也應該考慮使流程的這一部分自動化。
使用藍綠部署、金絲雀分析、滾動更新等策略部署到產品。在部署階段,將監視正在運行的應用程序以驗證當前部署是否正確或是否需要回滾。
持續交付(CD):監控
- 人員:站點可靠性工程師(SRE)、運營團隊。
- 技術:Zabbix、Nagios、Prometheus、Elastic Search、Splunk、Appdynamics、Tivoli。
- 過程:為了使軟件發行版具有故障安全性和健壯性,在生產環境中跟蹤發行版的運行狀況至關重要。應用程序監視工具將跟蹤性能指標,例如CPU利用率和發行版延遲。日志分析器將掃描由底層中間件和操作系統產生的大量日志,以識別行為并跟蹤問題的根源。如果生產中出現任何問題,將通知利益相關者以確保生產環境的安全性和可靠性。此外,監視階段可幫助組織收集有關其新軟件更改如何為收入貢獻的情報,幫助基礎設施團隊跟蹤系統行為趨勢并進行容量規劃。
持續交付(CD):反饋和協作工具
- 人員:站點可靠性工程師(SRE)、運營和維護團隊。
- 技術:JIRA、ServiceNow、Slack、電子郵件、Hipchat。
- 過程:DevOps團隊的目標是更快地持續發布,然后不斷減少錯誤和性能問題。這是通過不時地通過發送電子郵件向開發人員、項目經理提供有關新版本的質量和性能的反饋。通常情況下,反饋系統是整個軟件交付過程的一部分。因此,交付中的任何更改都會頻繁地登錄到系統中,以便交付團隊可以對它采取行動。
結語
組織必須評估一個整體的持續交付解決方案,該解決方案可以自動化或促進上述這些階段的自動化。
原文標題:What Is a CI/CD Pipeline?,作者:Jyoti Sahoo
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】