🔹 什麼是版本控制?
版本控制(Version Control)是一種用來追蹤檔案變化的系統,主要用來管理程式碼,但其實任何文件都能用版本控制來管理。
想像一下:- 工程師每天都在改程式。
- 如果改壞了、想回到昨天的版本怎麼辦?
- 如果兩個人同時改同一份檔案又該怎麼合併?
🔹 Git 是什麼?
Git 是一個分散式的版本控制系統。你可以把它想成:
像 Google 文件那樣,記得你每一個修改紀錄,但是專門給程式碼用的,還能多人協作、安全又可回溯。
用 Git 可以做到:
- 看誰改了哪一行
- 隨時回到任何一個歷史版本
- 支援多人同時改不同功能,最後再合併起來
🔹 GitHub 是什麼?
GitHub 是一個放 Git 專案的網站,也就是程式碼的「雲端主機」,讓團隊可以在線上共享、審查、協作開發。
Git 是技術,GitHub 是平台。
🔹 Branch(分支)是什麼?
在 Git 裡,「分支」就像是主線外開出的一條小路,可以讓工程師在不影響主線(通常是 main
或 master
)的情況下開發新功能、修 bug。
想像情境:
main
分支就像正式的產品。- 工程師想加一個「新功能 A」,就會從
main
拉出一條feature/A
分支。 - 他在
feature/A
分支上寫、測試,等都完成、確認沒問題,再「合併(merge)」回main
,讓正式產品也有這個功能。
🔹 Pull Request(PR)是什麼?
當開發者完成一個功能分支的開發後,他們會發出一個 PR(Pull Request),意思是:「我寫好了,可以請別人幫忙審核並把它合併進主線嗎?」
🔹 CI/CD 的基本概念
CI(持續整合,Continuous Integration)
CI 是指開發者將程式碼頻繁地(通常是每天多次)合併進主分支(例如 main
),並且透過自動化工具來進行編譯、測試、驗證,確保新提交的程式碼不會破壞系統。
CI 的關鍵:
- 開發者將自己的程式碼提交到 Git 存儲庫。
- 每次提交(push)後,CI 工具會自動拉取最新的程式碼,執行測試、構建等操作。
- 如果測試通過,才會繼續進行合併或部署。
CD(持續交付,Continuous Delivery)
CD 是指把 CI 過程中已經測試過且合格的程式碼,自動部署到測試環境或預生產環境中,確保每個版本都可以被隨時交付。
CD 的關鍵:
- 在 CI 的基礎上,CI 完成後,會自動將已測試的程式碼部署到其他環境。
- 這樣可以隨時、快速地將新功能或修復部署到生產環境。
CD(持續部署,Continuous Deployment)(高階)
與持續交付相似,但在持續部署中,每次測試通過後,程式碼會自動部署到生產環境。這是一個更加自動化的過程。
🔹 CI/CD 與 Git 的搭配
Git 在 CI/CD 流程中扮演了核心角色。下面是 CI/CD 流程中如何與 Git 整合的具體步驟:
1. 開發者編寫程式碼並提交到 Git(推送到遠端分支)
開發者在本地端的分支上寫好程式碼後,會將變更推送到遠端 Git 存儲庫(如 GitHub)。
2. CI 工具觸發自動化流程
每次提交代碼後,CI 工具(如 Jenkins、GitHub Actions、GitLab CI、Travis CI)會檢測到變動,並自動啟動構建過程。
這包括:
- 拉取程式碼
- 執行單元測試、集成測試
- 編譯程式碼(如果有需要)
3. 測試結果回饋
CI 工具會在測試完成後提供結果。
- 如果測試成功,程式碼可以繼續處理,進入到下個階段。
- 如果測試失敗,開發者會收到通知,並且需要修正錯誤後重新提交。
4. 自動部署到測試環境
當程式碼通過所有測試,並成功進行構建後,CI 工具會自動將代碼部署到測試環境或預生產環境中進行進一步驗證。
5. 代碼合併(如果是多分支開發)
如果是 feature
分支開發的話,CI 工具會觸發 Pull Request(PR),讓其他開發者進行代碼審查和合併。
- 當 PR 通過審查後,會將其合併到
main
分支。 - 然後會觸發部署流程,將最新的代碼推送到生產環境。
6. 自動部署到生產環境
在某些高效能團隊中,當程式碼經過所有測試且合併後,會自動部署到生產環境。這稱為「持續部署(Continuous Deployment)」。