ai
SonarQube Analysis กับ Hexagonal Architecture —

SonarQube Code Quality Analysis

SonarQube วิเคราะห์ Code Quality ตรวจจับ Bugs, Code Smells, Vulnerabilities รองรับ 30+ ภาษา ใช้ Quality Gates กำหนดมาตรฐาน ใช้ร่วมกับ CI/CD Pipeline
เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง Burp Suite Pro Developer Experience DX —
Hexagonal Architecture แยก Domain ออกจาก External Systems ใช้ Ports and Adapters Pattern ทำให้ Code สะอาด ทดสอบง่าย SonarQube ช่วยตรวจสอบว่า Code ยังคง Clean
เนื้อหาเกี่ยวข้อง — อ่านต่อ: api authentication คือ
SonarQube Setup และ Configuration
# === SonarQube Setup ===
# 1. Docker Compose
# docker-compose.yml
# version: '3.8'
# services:
# sonarqube:
# image: sonarqube:community
# ports:
# - "9000:9000"
# environment:
# SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
# SONAR_JDBC_USERNAME: sonar
# SONAR_JDBC_PASSWORD: sonar
# volumes:
# - sonarqube_data:/opt/sonarqube/data
# - sonarqube_extensions:/opt/sonarqube/extensions
# depends_on:
# - db
#
# db:
# image: postgres:16
# environment:
# POSTGRES_USER: sonar
# POSTGRES_PASSWORD: sonar
# POSTGRES_DB: sonar
# volumes:
# - postgresql_data:/var/lib/postgresql/data
# docker compose up -d
# เข้า http://localhost:9000 (admin/admin)
# 2. SonarScanner CLI
# npm install -g sonarqube-scanner
# หรือ
# brew install sonar-scanner
# 3. sonar-project.properties
cat > sonar-project.properties << 'EOF'
sonar.projectKey=my-hexagonal-app
sonar.projectName=My Hexagonal App
sonar.projectVersion=1.0
# Source
sonar.sources=src
sonar.tests=tests
sonar.sourceEncoding=UTF-8
# Language
sonar.language=py
sonar.python.version=3.11
# Coverage
sonar.python.coverage.reportPaths=coverage.xml
sonar.python.xunit.reportPath=test-results.xml
# Exclusions
sonar.exclusions=**/migrations/**,**/tests/**,**/__pycache__/**
sonar.test.exclusions=**/migrations/**
# Quality Gate
sonar.qualitygate.wait=true
EOF
# 4. รัน Analysis
# sonar-scanner \
# -Dsonar.host.url=http://localhost:9000 \
# -Dsonar.login=your-token
# 5. GitHub Actions Integration
# .github/workflows/sonar.yml
# name: SonarQube Analysis
# on: [push, pull_request]
# jobs:
# sonar:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# with:
# fetch-depth: 0
# - uses: actions/setup-python@v5
# with:
# python-version: '3.11'
# - run: |
# pip install -r requirements.txt
# pytest --cov=src --cov-report=xml tests/
# - uses: SonarSource/sonarqube-scan-action@master
# env:
# SONAR_TOKEN: }
# SONAR_HOST_URL: }
echo "SonarQube configured"
echo " URL: http://localhost:9000"
echo " Scanner: sonar-scanner CLI"
echo " CI/CD: GitHub Actions integration"

Best Practices
- Quality Gates: ตั้ง Quality Gate ให้ Coverage > 80%, ไม่มี Critical Bugs
- Domain Isolation: Domain Layer ต้องไม่ Import อะไรจาก Adapters
- Port-first: ออกแบบ Port (Interface) ก่อน แล้วค่อยสร้าง Adapter
- Test with Fakes: ใช้ In-memory Adapters สำหรับ Unit Tests เร็วและ Isolated
- CI/CD Gate: รัน SonarQube ใน CI/CD Block Deploy ถ้าไม่ผ่าน Quality Gate
- Dependency Rule: Dependencies ชี้เข้าใน ไม่ออกนอก Domain ไม่รู้จัก Infrastructure
SonarQube คืออะไร
Open-source Platform วิเคราะห์ Code Quality ตรวจจับ Bugs Code Smells Vulnerabilities Duplications รองรับ 30+ ภาษา Quality Gates มาตรฐาน CI/CD Community Edition ฟรี
แนะนำเพิ่มเติม — หนังสือเทรดที่ SiamCafeBook
เนื้อหาเกี่ยวข้อง — ทำความเข้าใจ MLflow Experiment Cost Optimization ลดค่าใช้จ่าย





