# CI/CD Introduce --- ## 1. 為什麼我們需要 CI/CD ? ---- ### 目前大部分軟體公司都以**敏捷式**的開發方法為主軸 **敏捷開發的目標:** 1. ***比較小且快速*** 的循環 2. ***持續驗證*** 系統開發結果 3. ***小部分小部分*** 地儘早確認 4. 且依據測試結果 ***快速修正*** ---- ![DevOps Flow](https://tech.ucsf.edu/sites/g/files/tkssra1006/f/wysiwyg/dev_ops_graphic.jpg) ---- 為了要實現這個目標,應該要儘量減少浪費時間的事情,其中最容易下手的就是例行工作或手工作業等,我們應該將這些事情交給自動化工具。 例如: 1. 環境建置 2. 單元測試 3. 產品部署 4. ... ---- 而為了要達成自動化工作,所以我們需要CI/CD ***CI*** Continuous Integration 持續整合 ***CD*** Continuous Delivery 持續交付 Continuous Deployment 持續佈署 --- ## 2. CI/CD 名詞解釋 ---- ### 「持續」是什麼意思? > ***持續*** 並不代表「一直在運行」,而是「隨時可運行」 ---- 1. 頻繁發布 持續背後的目標是 ***可隨時*** 交付高品質的產品 2. 自動化流程 實現此頻率的關鍵是用 ***自動化流程*** 來處理工作中各項例行事務 3. 可重複 我們的自動化流程在大部分的情況下具有相同的行為,這個過程應該是 ***可重複*** 的 4. 快速迭代 無論軟體更新/發布的頻率如何,整個過程都應該要 ***快速的*** 將代碼持續交付,如果每一次交付都需要花上半天那就太慢了 ---- ### 持續整合 (CI,Continuous Integration): > 透過頻繁地提交新功能的變更,觸發自動化建置和測試,確保最新版本的軟體是可運行的 ---- 因此CI通常包含以下項目: 1. 建置 (build) 2. 測試 (test,單元測試 / 整合測試) 3. 程式碼分析 (source code analysis) 4. ... ---- 通過CI,每次的push就是一次基本的測試及驗證,開發人員能夠輕鬆且快速的檢查到許多小bug 這些錯誤如果在QA階段才進行驗證的話,需要耗費更多時間及成本才能修正。 測試人員在後續的QA中也能夠測試更多的場景或是專注在更加複雜的業務邏輯。 ---- 在CI驗證過程中的各類工具,會產生一些回饋給開發者或其他角色,包含網頁/報表等等,可用來追蹤並改善軟體潛藏的問題。 ---- ***整合不同人的代碼的困難度*** 跟 ***待整合的代碼數量*** 成正比。也就是說: > 越晚開始整合,整合的難度與失敗的機率越高。 因此CI可以達成以下目的: 1. 降低基本錯誤的風險 2. 減少例行測試的程序 3. 可隨時產生一版可部署的版本 4. 得到驗證過程中產生的報表 ---- ### 持續交付 (CD,Continuous Delivery): > 持續交付在持續整合的基礎上,將整合後的程式碼部署到更貼近真實執行環境的測試環境 (即Local、Staging) ---- 頻繁地將產品的新版本,交付給QA進行測試。如果通過測試,代碼就可進入Production環境。 持續交付可以看作持續整合的下一步。它強調的是,不管怎麼更新,產品是隨時隨地可以交付的。 > 持續交付**不是**指每一個改動都要儘快部署到產品環境中,它指的是任何的程式碼修改都可以在**任何時候**實施部署 ---- ### 持續部署 (CD,Continuous Deployment): > 持續部署是持續交付的下一步,指的是代碼通過測試以後,自動部署到生產環境。 持續部署的目標是,代碼在任何時刻都是可部署的,可以進入生產階段。 在持續交付的實踐中,交付的目標是QA,但是實際上,產品最終是要交付到客戶手上 ---- ![cd vs cd](https://pic2.zhimg.com/80/v2-7afc0700640e8baf1e114c241776e3ba_hd.jpg) ---- ![CD](https://i.imgur.com/RrsuJwM.png) ---- ### CI/CD 比較 1. 持續集成 (CI) 只到開發階段而已,甚至沒有進入到本地測試環境 2. 持續部署是持續交付的最終目標 --- ## CI 範例 ---- ### 工具 要執行CI通常都需要 1. CI平台 2. 專案所需求的工具 ---- ![ci tools](https://ideas2life.com.cy/wp-content/uploads/2018/10/DevOps.png) ---- 這裡選擇用 ***gitlab CI*** 當我們的CI平台,因為gitlab ci我們需準備的環境比較少 ![](https://i.imgur.com/V3JALAN.png) ---- ### CI的基本驗證工作 1. 建置 (build) 2. 測試 (test,單元測試 / 整合測試) 3. 程式碼分析 (source code analysis) 4. ... ---- --- ### Reference 1. [什麼是CI/CD?](https://linux.cn/article-9926-1.html) 2. [山姆鍋對持續整合、持續部署、持續交付的定義](https://samkuo.me/post/2013/10/continuous-integration-deployment-delivery/) 3. [為什麼我們需要 CI/CD ?](https://medium.com/@william456821/%E4%BB%80%E9%BA%BC%E6%98%AF-ci-cd-72bd5ae571f1) ###### tags: `CI/CD`
{"metaMigratedAt":"2023-06-15T02:38:47.901Z","metaMigratedFrom":"Content","title":"CI/CD Introduce","breaks":true,"contributors":"[{\"id\":\"d55dc065-9b27-41cc-82a8-47fb534a46e9\",\"add\":5549,\"del\":2923}]"}
    510 views