Mọi team đều bắt đầu với quy trình deploy giống nhau:
- Viết code trên laptop.
- Nén thành file zip.
- SSH vào server.
- Cầu nguyện đừng có lỗi.
- Có gì đó vỡ lúc 2 giờ sáng.
CI/CD ra đời để tự động hóa Bước 3–5, giúp nó nhất quán và bớt kinh hoàng hơn.
Đây là Hướng dẫn chuyên sâu về CI/CD. Chúng ta sẽ dùng mô hình “Dây chuyền sản xuất” để hiểu pipelines, GitHub Actions, và nghệ thuật deploy không downtime.
Phần 1: Nền tảng (Mô hình tư duy)
Cách cũ: Thợ thủ công
Trong xưởng rèn, một người làm hết mọi thứ: nung kim loại, tạo hình, làm nguội, kiểm tra, đóng gói. Anh ấy nghỉ là không có hàng. Anh ấy sai là khách nhận được hàng lỗi.
Đây chính là deploy thủ công.
Cách mới: Dây chuyền sản xuất
Nhà máy hiện đại có các trạm: Dập → Hàn → Sơn → Kiểm tra → Đóng gói. Mỗi trạm kiểm tra đầu ra của trạm trước. Nếu Kiểm tra thất bại, không có gì tới Đóng gói.
Đây là CI/CD:
| |
Phần 2: Điều tra (Cấu trúc GitHub Actions)
GitHub Actions là công cụ CI/CD phổ biến nhất cho dev. Một “workflow” chỉ là một file YAML trong .github/workflows/.
Đọc hiểu một Pipeline
| |
Các khái niệm cần chú ý:
on:— Trigger. (push,pull_request,schedule).jobs:— Các đơn vị công việc độc lập, có thể chạy song song.needs:— Tạo quan hệ phụ thuộc (Job B chờ Job A xong).secrets:— Mật khẩu/token lưu trong GitHub Settings. Không bao giờ hardcode vào YAML!
Phần 3: Chẩn đoán (Lỗi thường gặp)
Bí ẩn “CI pass nhưng Production vỡ”
| Vấn đề | Nguyên nhân | Cách sửa |
|---|---|---|
| Dependency khác nhau | CI cài fresh. Production có rác từ trước. | Docker hóa mọi thứ. Dùng immutable artifact. |
| Biến môi trường khác | CI có DEBUG=True. Production thì không. | Dùng env: trong GitHub Actions và đồng bộ với secret production. |
| Quên chạy migration | Code deploy xong, migration chưa chạy. | Thêm bước migration TRƯỚC bước deploy. |
| Test pass nhưng app crash | Test không cover code khởi động. | Thêm smoke test: curl http://localhost:8000/health sau khi deploy xong. |
Phần 4: Giải pháp (Chiến lược Deploy)
Không phải mọi cách deploy đều giống nhau. Chiến lược quyết định mức độ rủi ro.
Chiến lược 1: Rolling Deployment (Mặc định Kubernetes)
Thay thế pod cũ từng cái một. Rủi ro tối thiểu. Có lỗi thì dừng.
Chiến lược 2: Blue/Green Deployment (Không Downtime)
Chạy HAI môi trường production giống hệt nhau. “Blue” đang live. “Green” là phiên bản mới.
| |
- Lợi ích: Rollback tức thì. Green gặp lỗi thì flip switch về Blue.
- Chi phí: Cần gấp đôi hạ tầng.
Chiến lược 3: Canary Deployment (Từng bước)
Triển khai dần dần cho một % người dùng. Không có lỗi thì tăng lên 100%.
| |
Mô hình tư duy chốt hạ
| |
Quy tắc CI/CD tốt:
- Phản hồi nhanh: Pipeline phải báo lỗi trong vòng 5 phút.
- Mọi thứ là code: Config pipeline nằm trong Git. Không click chuột trên Jenkins UI.
- Artifact bất biến: Build một lần, deploy cùng image đó khắp nơi. Không bao giờ
git pulltrên server production.
