淺談CI/CD與項目實戰

曾幾何時,研發、測試、運維各自爲戰,如戰國之羣雄割據,各領風騷,直至CI/CD橫空出世,縱橫捭闔,四海歸一,實現了“車同軌 書同文 行同倫”,將開發環境、測試環境、預發環境、生產環境聚於統一戰線,上傳下達,流水作業,一榮俱榮、一辱俱辱。

一、什麼是CI/CD

1.CI(Continuous Integration,持續集成)

圖片鏈接
圖片來源:https://blog.csdn.net/csdnnews/article/details/104624343

持續集成的重點是將各個開發人員的工作集合到一個代碼倉庫(如Gitlab)中。通常,每天都要進行幾次提交,主要目的是早發現,早更正,防患於未然,使團隊更加緊密結合,更好地協作。

2.CD(Continuous Delivery,持續交付)

在這裏插入圖片描述
圖片來源:https://blog.csdn.net/csdnnews/article/details/104624343

持續交付的目的是最小化部署或釋放過程中固有的摩擦。頻繁地將軟件的新版本,交付給質量團隊或者用戶,以供評審。如果評審通過,代碼就進入生產階段。
持續交付可以看作持續集成的下一步。它強調的是,不管怎麼更新,軟件是隨時隨地可以交付的。

3.CD(Continuous Deployment,持續部署)

持續部署是一種更高程度的自動化,無論何時對代碼進行重大更改,都會自動進行構建/部署。

二、爲什麼要用CI/CD

如果一個團隊缺乏統一標準的環境,再努力,也是事倍功半。而使用容器化技術、CI/CD,不僅能讓開發環境、測試環境、預發環境、生產環境保持一致,同時也對測試和質量保證有至關重要的作用,能達到事半功倍的效果。

1.CI

原文鏈接:https://blog.csdn.net/csdnnews/article/details/104624343
開發人員每天都將自己的更改推送到主分支中進行集成,通常,這樣的操作每天都會發生很多次。從更高的視角來看,CI 能使開發者更快的發現模塊或功能中的錯誤。持續集成的整個流程如下

1.開發者將代碼提交到項目主分支;
2.CI 服務器檢測到更改並將最新代碼拉下來;
3.CI 服務器編譯更改後的代碼,並給他們打個標籤;
4.CI 服務器執行所有的單元測試、集成測試、端到端的測試;

如果上述任何階段,出現任何問題(包括測試用例失敗),整個 CI 流程將會被停止,並且將錯誤信息發送給開發人員。

2.CD

持續交互在業界被簡稱爲 CD ,是指在自動完成所有的自動化測試代碼過後,將通過的代碼進行直接部署。

從本質上來講,這是軟件發佈的最佳實踐。—— Jez Humble(譯者注:Jez Humble,被譽爲「持續交付之父」,《DevOps 實踐指南》、《精益企業》、《持續交付》作者。)

持續交互包含以下幾點:

1.在所有的測試通過後,自動創建一個版本,並使用腳本,將它自動部署到你所有的環境中去(測試環境、集成環境、生產環境等)。

2.作爲整個流程的最後一個步驟,你還需要運行冒煙測試,來確保你所部署的服務正在順利的運行。

3.設置監控報警,當出現問題時要第一時間通知開發者。

4.應該提供功能切換的功能,隱藏代碼的具體實現細節。

在部署過程中,所有的修改都是單獨提交的,因此由部署帶來的風險和 Bug 也會相對較少。這意味着,企業能夠根據需求,更加快速地開發並部署代碼。如果能將 CD 與容器化技術(如 Docker、k8s)配合使用,在雲平臺上,甚至可以實現不停機部署,這樣開發團隊就可以在任何時間進行代碼部署。

3.四個指標

正如 《Accelerate》一書中所說,軟件團隊的性能和效率可以通過四個指標來檢查。而良好的 CI / CD 的實踐可以大大改善四個指標的得分。

1.交付時間:

CI / CD 可以讓開發人員編寫的代碼直接部署到生產環境中。如果一個團隊有良好的 CI / CD 的流程時,可能只需要幾個小時甚至是幾分鐘時間就能完成新需
求上線。

2.部署頻率:

如果能夠快速部署,小範圍部署,那麼團隊可以頻繁地進行部署,特別是那些“無關緊要”的部署。Amazon 曾公佈數據表示,在他們全球所有的團隊中,平均每
 11s 就會部署一次。推薦一本書《鳳凰項目—一個IT運維的傳奇故事》

3.平均故障恢復耗時:

舉個例子,如團隊中的某一個部署導致整個系統崩潰,有可能讓整個系統停機好幾個小時。那如果這個團隊有良好的 CI / CD 的實踐,那他們可以很準確地知道
是由於哪個更改造成,知道是由哪個產品線更新引起的。或許 15 分鐘後,就能夠開發出修復程序並將其重新部署到生產環境中。

4.變更失敗率:

如果使用了 CI ,那麼所有的修改都會在你的 CI 服務器進行集成並運行所有的單元測試,這些修改也會在與用戶環境非常接近的環境中運行,當這些變更
呈現在用戶面前時,都已經是經過了大量的測試驗證過的版本,幾乎不會出現任何隱藏的 Bug。

以上內容來自:https://blog.csdn.net/weixin_44903147/article/details/96291588和https://blog.csdn.net/csdnnews/article/details/104624343

三、怎麼搭建一套CI/CD

PS:上面講了這麼多理論的東西,讓人覺得有點模糊、遙遠、不具體。下面是我根據CI/CD的基本理念,搭建的一套環境,裏面的項目比較簡單,在一些規劃上也不太合理,主要的目的是能夠對CI/CD有一個比較形象的瞭解。

GitHub地址:https://github.com/anqixiang/CICD_LNMP.git

第1集,環境搭建

第2集,LNMP項目準備

第3集,WebHook觸發mvn打包

第4集,SonarQube實現CodeReview

第5集,build image

第6集,部署到測試環境,Selenium自動測試

第7集,模擬版本更新,在測試環境驗證

第8集,部署到生產環境

第9集,流水線部署到測試環境

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章