CI / CD 持續整合和部署 相關概念
文章目錄
注:部分資料轉載自原文: https://blog.csdn.net/qq_32261399/article/details/76651376
什麼是CI / CD?其意義何在?
在深入研究CI / CD自動化工具之前,我們首先需要了解其基本概念。正如我們所提到的,持續整合和持續部署通常與敏捷開發環境齊頭並進。在這類環境中,團隊希望在構建完成後立即將不同的程式碼段部署到生產環境中。
CI/CD持續整合/持續部署定義
持續整合
(Continuous integration)是一種軟體開發實踐,即團隊開發成員經常整合它們的工作,通過每個成員每天至少整合一次,也就意味著每天可能會發生多次整合。每次整合都通過自動化的構建(包括編譯,釋出,自動化測試)來驗證,從而儘早地發現整合錯誤。
持續部署
(Continuous deployment)是通過自動化的構建、測試和部署迴圈來快速交付高質量的產品。某種程度上代表了一個開發團隊工程化的程度,畢竟快速運轉的網際網路公司人力成本會高於機器,投資機器優化開發流程化相對也提高了人的效率,讓 engineering productivity 最大化。
補:持續交付
(Continuous delivery,縮寫為 CD),是一種軟體工程手法,讓軟體產品的產出過程在一個短週期內完成,以保證軟體可以穩定、持續的保持在隨時可以釋出的狀況。它的目標在於讓軟體的建置、測試與釋出變得更快以及更頻繁。這種方式可以減少軟體開發的成本與時間,減少風險。
與DevOps的關係
持續交付與DevOps的含義很相似,所以經常被混淆。但是它們是不同的兩個概念。DevOps的範圍更廣,特別是軟體交付過程所涉及的多個團隊之間的合作(開發、運維、QA、管理部門等),並且將軟體交付的過程自動化。另一方面,持續交付是種自動化交付的手段,關注點在於將不同的過程集中起來,並且更快、更頻繁地執行這些過程。因此,DevOps可以是持續交付的產物,持續交付的結果直接匯入DevOps;
與持續部署的關係
有時候,持續交付也與持續部署混淆。持續部署意味著所有的變更都會被自動部署到生產環境中。持續交付意味著所有的變更都可以被部署到生產環境中,但是出於業務考慮,可以選擇不部署。如果要實施持續部署,必須先實施持續交付。
小結
使用CI / CD工具可自動完成構建,測試和部署新程式碼的過程。即使只更改了其中一行甚至是一個字元,團隊成員都可以立即獲得有關其程式碼生產準備情況的反饋。如此一來,每位團隊成員都可以將他們的程式碼推送到生產體系當中,而構建,測試和部署的過程則自動完成,以便他們放心大膽地繼續處理應用程式的下一部分。
瞭解到在我們的工作流程中使用CI模型實現自動化的重要意義,接下來就要看看哪款工具最符合我們的實際需求了。
主流的CI/CD工具
Jenkins
Jenkins是CI市場中最知名且最常見的名號之一。其最初是由Sun公司的一位工程師打造的一個輔助專案,並迅速擴充套件為最大的開源CI工具之一,可幫助工程團隊實現自動化部署。順帶一提:我們OverOps也在使用Jenkins以及自己開發的CLI工具。
它有什麼作用?
與其它CI工具一樣,Jenkins可以自動構建、測試及部署任務。該工具支援Windows、Mac OSX以及各類Unix系統,可以使用本機系統軟體包以及Docker進行安裝,也可以在安裝了Java Runtime Environment(JRE)的任何機器上獨立安裝。
在實踐方面,Jenkins允許團隊中的任何成員將他們的程式碼推送到build當中,並立即獲得其準備情況的反饋。當然,在大多數情況下,您的團隊需要通過自定義要求對Jenkins進行一些調整和定製。
Jenkins的強大之處體現在其豐富的外掛生態系統上。它提供超過1000款外掛選項,可以整合幾乎所有市場上可用的工具和服務。作為一款開源工具,您還可以選擇自定義適合自身情況的解決方案——就像我們一樣。然而,大家需要投入一定時間與精力來確保它適合您的實際需求。
價格:免費
Travis CI
Travis CI是CI / CD生態系統中比較常見的名號之一,最初設定為開源專案,並在多年擴充套件之後轉為閉源專案。它專注於CI工作,通過自動化測試和警報系統提高構建過程的效能。
它有什麼作用?
Travis-CI允許使用者在部署程式碼時對程式碼進行快速測試。它支援程式碼大小變更,可識別構建與測試中發生的一切變更。檢測到變更後,Travis CI可以提供有關變更是否成功的反饋。
開發人員可以使用Travis CI對執行時進行觀察,並行執行多項測試,並將該工具與Slack、HipChat以及Email等整合,從而通過多種渠道獲取問題或構建失敗通知。
Travis CI支援容器構建,並支援Linux Ubuntu和OSX。您可以在不同的程式語言中使用它,例如Java,C#,Clojure,GO,Haskell,Swift,Perl等等。其具備一份相對有限的第三方整合列表,但由於關注重點在於CI而非CD,因此其可能解決不了您的實際問題。
價格:雖然Travis CI為開源專案且提供免費支援,但同時亦提供專有版本,價格從自助版本的69美元/月到高階版本的489美元/月不等。
一點補充:為確保始終備份最近的構建版本,Travis CI會在您執行新構建時將GitHub儲存庫克隆到新的虛擬環境中。
一句話總結:如果您的程式碼是開源的,並且您更關注構建中的持續整合部分,那麼Travis CI值得一試。
Circle CI
Circle CI是一款基於雲的工具,可自動執行整合和部署任務。它還強調在部署之前對程式碼中的每項變更進行測試,且使用多種方法——如單元測試、整合測試與功能測試等。該工具支援容器、OSX以及Linux環境,可以在私有云或您自己的資料中心內執行。
它有什麼作用?
Circle CI能夠與您當前的版本控制系統(如GitHub,Bitbucket等)整合,並在檢測到變更時執行多種操作。其支援的變更方式包括提交,開啟PR或任何其他程式碼更改。
每項程式碼更改都會根據您的初始配置和首選項建立build,並在潔淨容器或虛擬機器中執行測試。每個build都將接受多項操作處理,包括依賴性檢查、測試與部署等。如果build通過測試,則可以通過AWS CodeDeploy、Google容器引擎、Heroku、SSH或您選擇的任何其他方法進行部署。
存在問題的build和測試結果將通過Slack,HipChat,IRC或多種其他整合頻道進行傳送,團隊可以藉此快速瞭解變更結果。需要強調的是,Circle CI在配合各類不同語言時,可能要求進行一些調整與更改,因此建議大家首先檢視所選語言的說明文件。
價格:對於Linux使用者,第一套容器是免費的,每套額外容器每月50美元。對於構建1-5個build/天的團隊,以及私人資料中心或雲端計算環境,OSX版本起價為39美元/月,年度合同的價格為每使用者35美元/月。
一點補充:Circle CI可以自動清除GitHub上的冗餘build。如果在同一分支上觸發了較新的build,則該工具會識別並取消正在執行或排隊的舊build——包括尚未完成的build。
一句話總結:如果你正在尋找一款GitHub友好型工具,要求它背後擁有廣泛的社群,並可以在私有云或您自己的資料中心內執行,那麼Circle CI絕對值得一試。
Codeship
Codeship對CI / CD有著不同的看法,並提供託管持續整合即服務方案。該工具最初是為Rails開發人員提供持續整合平臺而構建的; 當時,他們需要在GitHub上託管自己的程式碼並將其部署到Heroku。由於極高的人氣與旺盛的需求,該公司多年來一直不斷擴充套件以支援其他技術方案。
它有什麼作用?
Codeship有兩種不同的產品,每種都有其優缺點。Codeship Basic允許通過Web UI和交鑰匙部署連線程式碼庫以設定CI / CD流程。它支援預配置CI環境,並允許多個不同的build在同一構建虛擬機器上執行。
Codeship Pro使用Docker定義CI / CD環境,藉此執行構建管道。它具有對構建環境的完全控制能力,允許您定義在其中執行的具體內容。Pro版本還提供預分支快取,設定對哪些映象以及工作流的哪個部分進行快取,且支援並行部署。
整體而言,Codeship支援多種語言,例如Java、Go、Node.js、Python以及Ruby等。在部署方面,Basic版本支援AWS、Heroku、Azure和Kubernetes,而Pro還額外支援AWS ElasticBeanstalk、Google App Engine以及Digital Ocean。
價格:免費計劃每月支援100個程式碼更新版本,且對專案、使用者及團隊數量不做限制。它還提供併發構建和並行測試管道。根據您需要的併發構建和並行測試管道數量,Basic與Pro版本的價格在49美元至79美元/月之間。
一點補充:Codeship提供一整套實用程式、指令碼及Docker映象集合,可以與該工具一起使用。該公司指出,其中一些還能夠與其他類似的工具一同使用。此集合包括可自定義的外部服務部署指令碼,用於安裝預設情況下未包含在構建虛擬機器上的特定軟體版本的指令碼等。
一句話總結:在同一名頭之下提供2種不同的工具可能看起來有點奇怪,但這也使得開發人員可以選擇更適合不同型別客戶的各種元素。由於Basic和Pro皆為免費提供,因此對於您的CI需求來說,這應該是個不錯的選擇。