# CI/CD Introduce
---
## 1. 為什麼我們需要 CI/CD ?
----
### 目前大部分軟體公司都以**敏捷式**的開發方法為主軸
**敏捷開發的目標:**
1. ***比較小且快速*** 的循環
2. ***持續驗證*** 系統開發結果
3. ***小部分小部分*** 地儘早確認
4. 且依據測試結果 ***快速修正***
----

----
為了要實現這個目標,應該要儘量減少浪費時間的事情,其中最容易下手的就是例行工作或手工作業等,我們應該將這些事情交給自動化工具。
例如:
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,但是實際上,產品最終是要交付到客戶手上
----

----

----
### CI/CD 比較
1. 持續集成 (CI) 只到開發階段而已,甚至沒有進入到本地測試環境
2. 持續部署是持續交付的最終目標
---
## CI 範例
----
### 工具
要執行CI通常都需要
1. CI平台
2. 專案所需求的工具
----

----
這裡選擇用 ***gitlab CI*** 當我們的CI平台,因為gitlab ci我們需準備的環境比較少

----
### 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}]"}