SonarQube Scan là gì? Và nó nằm ở đâu trong CI/CD
Ở bài trước, chúng ta nói về Aqua Scan – tập trung kiểm tra container/image.
Nhưng trước khi application được build thành Docker image, một câu hỏi khác cần được trả lời:
“Source code của chúng ta có đủ tốt và an toàn để build không?”
Đây là một trong những mục tiêu của SonarQube.
🏗️ SonarQube trong CI/CD
Một pipeline đơn giản có thể như sau:
Developer
│
▼
Git Push / Pull Request
│
▼
┌─────────────────────┐
│ CI Pipeline │
└──────────┬──────────┘
│
▼
Build / Test
│
▼
┌───────────────┐
│ SonarQube │
│ Scan │
└───────┬───────┘
│
┌─────┴─────┐
│ │
PASS ✅ FAIL ❌
│ │
▼ ▼
Docker Build Stop
│
▼
Aqua / Container Scan
│
▼
Deploy 🚀
Điểm quan trọng là: SonarQube và Aqua Scan kiểm tra những thứ khác nhau.
🔎 SonarQube kiểm tra gì?
SonarQube phân tích source code để tìm các vấn đề về:
Source Code
│
▼
┌────────────────────────┐
│ SonarQube │
├────────────────────────┤
│ 🐛 Bugs │
│ 🔐 Vulnerabilities │
│ 💩 Code Smells │
│ 🧪 Test Coverage │
│ 🔄 Duplicated Code │
│ 📏 Maintainability │
└────────────────────────┘
Ví dụ:
function getUser(id) {
const user = db.query("SELECT * FROM users WHERE id = " + id);
return user;
}
SonarQube có thể phát hiện đây là pattern có khả năng dẫn tới SQL Injection.
Thay vì chỉ nhìn: “Code chạy được”, chúng ta muốn biết thêm: “Code có an toàn, maintainable và ít technical debt không?”
🛡️ Quality Gate
Một trong những phần quan trọng nhất khi tích hợp SonarQube vào CI/CD là Quality Gate.
SonarQube Scan
│
▼
┌──────────────────┐
│ Quality Gate │
└────────┬─────────┘
│
┌──────────┴──────────┐
│ │
PASS ✅ FAIL ❌
│ │
▼ ▼
Continue Pipeline Stop Pipeline
│
▼
Build Docker Image
Ví dụ policy thường gặp:
New Bugs = 0
New Vulnerabilities = 0
Code Coverage ≥ 80%
Duplicated Code < 3%
Quality Gate = PASS
Nếu không đạt policy:
Quality Gate ❌
│
▼
Pipeline FAILED
│
▼
Developer fixes code
│
▼
Push again
│
▼
SonarQube Scan 🔄
Điều này giúp ngăn code có vấn đề tiếp tục đi xuống production pipeline.
🆚 SonarQube vs Aqua Scan
Đây là điểm rất dễ nhầm:
Application
│
┌──────────┴──────────┐
│ │
Source Code Docker Image
│ │
▼ ▼
SonarQube Aqua Scan
│ │
▼ ▼
Code Quality Container Security
Code Bugs OS Vulnerabilities
Code Smells Package CVEs
Code Security Image Issues
Coverage Misconfiguration
Nói đơn giản:
SonarQube → kiểm tra code
Aqua → kiểm tra container/image
Hai tool này không thay thế nhau.
🚀 Một CI/CD pipeline hoàn chỉnh
Khi kết hợp cả hai:
Developer
│
▼
Git Push / PR
│
▼
┌───────────────┐
│ Unit Tests │
└───────┬───────┘
│
▼
┌───────────────┐
│ SonarQube │
│ Scan │
└───────┬───────┘
│
Quality Gate
│
▼
PASS ✅
│
▼
┌───────────────┐
│ Docker Build │
└───────┬───────┘
│
▼
┌───────────────┐
│ Aqua Scan │
│ Image Scan │
└───────┬───────┘
│
Security Gate
│
▼
PASS ✅
│
▼
Container Registry
│
▼
Kubernetes
│
▼
Production 🚀
💡 Tư duy quan trọng
Có thể nhìn security/quality trong CI/CD theo nhiều lớp:
CODE
│
▼
SonarQube
"Code có tốt?"
│
▼
CONTAINER
│
▼
Aqua
"Image có an toàn?"
│
▼
INFRASTRUCTURE
│
▼
Cloud / K8s
"Environment có an toàn?"
│
▼
Production
Đây chính là tư duy của DevSecOps:
Security không phải là một bước kiểm tra cuối cùng trước production.
Mà security và code quality nên được đưa trực tiếp vào development & CI/CD pipeline.