---
# System prepended metadata

title: ♨ Day 2 CI/CD介紹
tags: [基礎]

---

---
tags: 基礎
---
###### tags: `CI/CD`、`vue`、`github`、`gitlab`

# ♨ Day 2 CI/CD介紹


常見情境
----------
Clone 的專案無法執行

A 將手上可以正式執行與建置的專案，提交到版本控制系統。但因為 A 的粗心，少提交相關的檔案，或組態設定內的設定指向不在版管範圍內的檔案。

當 B 接手維護時，因為檔案缺少或組態設定錯誤，造成 B 要花費額外的時間進行修正。

提交程式碼時，發現大量的衝突，需花大量額外時間來解決衝突
A、B、C 三位開發者協力開發一個系統，若三人都在負責功能開發完成後，才提交修改內容。

第一個提交的人很幸運，可能沒有任何的衝突。

第二個提交的人，因為手上的版本與線上的版本，己經有相當大的差異，他可能要額外花時間解決與前一位提交者的衝突。

第三個提交旳人，就更辛苦。因為最新版本的程式，在經過兩位提交的變更後，版本間的差異更大。變動的範圍越大，可能衝突項目就更多。甚至可能會重覆出現第二位提交者所遇到的衝突。


持續整合CI（Continuous Integration）
----------
持續整合的目的，利用頻繁地提交新功能的變更，觸發自動化建置和測試，確保最新版本的軟體是可運行的。
* 版本控制: 持續整合最重要的一步，可以說，沒有版控，就沒有 CI/CD。
* 建置: 確保提交的程式碼是否可以執行的。
* 自動化測試 確保功能正常與軟體品質。
* 程式碼分析: 檢查 code style 或程式的穩健度。

持續整合的重點是將各個開發人員的工作產品融合到一個儲存庫中。通常，此操作每天要進行多次，其主要目的是為了及早發現整合錯誤，最終將導致更緊密的內聚和更多的開發協作。

連續輸送的目的是使展開或釋放過程中固有的摩擦點最小化。通常，實現涉及自動化構建部署的每個步驟，以便可以隨時隨地（理想情況下）完成安全的程式碼釋出。

### 流程：

* 「程式建置」
開發人員在每一次的 Commit & Push 後，都能夠於統一的環境自動 Build 程式，透過此一步驟可以避免每個開發人員因本機的環境＆套件版本不相同，造成 Service 異常。

* 「程式測試」
當程式編譯完成後，將會透過「單元測試」測試新寫的功能是否正確，或者確認是否有影響到現有功能，透過該步驟進行測試，可以避免掉開發人員遺忘於本機先行檢查，作為「雙重驗證」工用。


持續交付CD（Continuous Delivery）
----------
持續交付（Continuous delivery）指的是，頻繁地將軟體的新版本，交付給質量團隊或者使用者，以供評審。如果評審通過，程式碼就進入生產階段。

持續交付可以看作持續整合的下一步。

它強調的是，不管怎麼更新，軟體是隨時隨地可以交付的。


持續交付在持續集成的基礎上，將集成后的代碼部署到更貼近真實運行環境的「類生產環境」（production-like environments）中。 比如，我們完成單元測試后，可以把代碼部署到連接資料庫的 Staging 環境中更多的測試。 如果代碼沒有問題，可以繼續手動部署到生產環境中。


持續部署CD（Continuous Deployment）
----------
持續部署是指當交付的程式碼通過評審之後，自動部署到生產環境中。持續部署是持續交付的最高階段。

這意味著，所有通過了一系列的自動化測試的改動都將自動部署到生產環境。它也可以被稱為“Continuous Release”。


參考:
* [淺談持續整合(CI)、持續交付(CD)、持續部署(CD)](https://iter01.com/598499.html)
* [08. 踏入 CI/CD 的世界 - 觀念篇](https://ithelp.ithome.com.tw/articles/10204538)
* [[學習筆記] 簡單了解 CI/CD 是什麼吧](https://zx2515296964.medium.com/%E5%AD%B8%E7%BF%92%E7%AD%86%E8%A8%98-%E7%B0%A1%E5%96%AE%E4%BA%86%E8%A7%A3-ci-cd-%E6%98%AF%E4%BB%80%E9%BA%BC%E5%90%A7-7adf50a573e6)
* [Day12 什麼是 CICD](https://ithelp.ithome.com.tw/articles/10219083)
* [CI/CD是什麼？如何理解持續集成、持續交付和持續部署](https://www.itnotetk.com/2022/03/20/ci-cd%E6%98%AF%E4%BB%80%E9%BA%BC%EF%BC%9F%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3%E6%8C%81%E7%BA%8C%E9%9B%86%E6%88%90%E3%80%81%E6%8C%81%E7%BA%8C%E4%BA%A4%E4%BB%98%E5%92%8C%E6%8C%81%E7%BA%8C%E9%83%A8/)