CI/CD Dokümantasyonu
İçindekiler
- Genel Bakış
- Pull Request Doğrulama Pipeline'ı
- CI/CD Pipeline'ı
- Branch Tabanlı Semantic Versioning
- Deployment Stratejisi
- Ön Gereksinimler
- Sorun Giderme
Genel Bakış
SERENDER Banking servisi, kod doğrulamadan production deployment'a kadar tüm yazılım teslim sürecini otomatikleştiren GitHub Actions ile inşa edilmiş kapsamlı bir CI/CD pipeline kullanır. Pipeline iki ana workflow'dan oluşur:
- PR Doğrulama Pipeline'ı (
pr.yml) - Build, test ve kod kalitesi kontrolleri ile pull request'leri doğrular - CI/CD Pipeline'ı (
ci.yml) - Semantic versioning ve Kubernetes deployment ile otomatik deployment'ı yönetir
Pull Request Doğrulama Pipeline'ı (pr.yml)
Tetikleme Koşulları
PR doğrulama pipeline'ı aşağıdaki branch'leri hedefleyen pull request'lerde tetiklenir:
- develop
- test
- main
Pipeline Job'ları
1. Build & Test Job'ı
Amaç: Otomatik testler yoluyla kod kalitesi ve fonksiyonalitesini doğrular
Adımlar: 1. Kod Checkout: Pull request branch'inden en güncel kodu alır 2. .NET Ortam Kurulumu: .NET 9.0.x SDK'sını yapılandırır 3. Dependency Restore: Tüm NuGet paketlerini indirir ve restore eder
4. Solution Build: Tüm solution'ı Release konfigürasyonunda derler 5. Test Çalıştırma: Kod coverage toplama ile tüm test türlerini çalıştırırdotnet test Serender.Banking.sln \
--configuration Release \
--no-build \
/p:CollectCoverage=true \
/p:CoverletOutputFormat=opencover
Kapsanan Test Türleri: - Unit Test'ler: Bireysel bileşen testleri - Integration Test'ler: Servis etkileşim testleri - Contract Test'ler: Pact ile API contract doğrulaması
2. SonarQube Analiz Job'ı
Amaç: Kod kalitesi, güvenlik açıkları ve sürdürülebilirlik için statik kod analizi yapar
Bağımlılık: Build & Test job'ının başarılı tamamlanmasını gerektirir
Adımlar: 1. Kod Checkout: Doğru analiz için tüm git geçmişini alır 2. Coverage Raporları İndirme: Önceki job'dan test coverage verilerini alır 3. Java Ortam Kurulumu: JDK 17'yi yapılandırır (SonarQube scanner için gerekli) 4. .NET SDK Kurulumu: Kod analizi için .NET 9.0.x'i yapılandırır 5. SonarScanner Kurulumu: Global .NET SonarQube scanner aracını kurar 6. Analiz Çalıştırma: Kapsamlı kod analizi gerçekleştirir
dotnet-sonarscanner begin \
/k:"Serender-fixedassets" \
/d:sonar.host.url="${{ secrets.SONAR_HOST_URL }}" \
/d:sonar.login="$SONAR_TOKEN" \
/d:sonar.cs.opencover.reportsPaths="**/*.opencover.xml"
dotnet build Serender.Banking.sln --configuration Release
dotnet-sonarscanner end /d:sonar.login="$SONAR_TOKEN"
Analiz İçeriği: - Kod duplikasyonu tespiti - Güvenlik açığı taraması - Kod karmaşıklığı analizi - Test coverage entegrasyonu - Teknik borç değerlendirmesi
CI/CD Pipeline'ı (ci.yml)
Tetikleme Koşulları
CI/CD pipeline'ı aşağıdaki branch'lere push'larda tetiklenir:
- develop - Development ortamı
- test - Test ortamı
- main - Production ortamı
Pipeline Job'ları
1. Docker Build & Push Job'ı
Amaç: Docker image'ları oluşturur ve semantic versioning'i yönetir
Temel Özellikler: - Multi-architecture desteği (ARM64, AMD64) - Branch adlandırma konvansiyonlarına dayalı semantic versioning - Çift registry push (Docker Hub + GitHub Container Registry)
Adımlar:
- Kod Checkout: Versiyon analizi için tüm git geçmişini alır
- Semantic Versiyon Üretimi:
- Git tag'leri ve branch adlarını analiz eder
- Uygun versiyon artırma stratejisini belirler
-
Yeni semantic versiyon oluşturur
-
Docker Ortam Kurulumu:
- QEMU Kurulumu: Multi-architecture build'leri etkinleştirir
-
Buildx Kurulumu: Gelişmiş Docker build özelliklerini yapılandırır
-
Registry Kimlik Doğrulama:
- GitHub Container Registry: Yerleşik
GITHUB_TOKENkullanır -
Docker Hub: Organizasyon secret'larını kullanır (
DOCKERHUB_USERNAME,DOCKERHUB_TOKEN) -
Image Build & Push:
-
Git Tag Oluşturma: Repository'ye versiyon tag'leri oluşturur ve push'lar
2. Kubernetes Deployment Job'ı
Amaç: Yeni Docker image'ını Kubernetes cluster'larına deploy eder
Bağımlılık: Başarılı Docker build job'ını gerektirir
Ortam Seçimi:
- main branch → serender-prod namespace (Production)
- Diğer branch'ler → serender-test namespace (Testing)
Adımlar: 1. Kod Checkout: Deployment konfigürasyonlarını alır 2. Namespace Seçimi: Hedef ortamı belirler 3. Image Güncelleme: Kubernetes deployment'ı yeni image ile günceller
kubectl set image -n ${NAMESPACE} \
deployment/banking-deployment \
banking=teknosol/banking:${NEW_VERSION}
Branch Tabanlı Semantic Versioning
Pipeline, branch adlandırma konvansiyonlarına dayalı akıllı semantic versioning uygular:
Versiyon Artırma Kuralları
| Branch Deseni | Versiyon Artırma | Örnek | Açıklama |
|---|---|---|---|
feature!/* |
Major | 2.0.0 → 3.0.0 |
Breaking değişiklikler |
feature/* |
Minor | 2.0.0 → 2.1.0 |
Yeni özellikler |
bugfix/* |
Patch | 2.0.0 → 2.0.1 |
Hata düzeltmeleri |
hotfix/* |
Patch | 2.0.0 → 2.0.1 |
Kritik düzeltmeler |
| Diğer branch'ler | Patch | 2.0.0 → 2.0.1 |
Varsayılan artırma |
Versiyon Üretim Süreci
- En Son Tag Tespiti: En güncel semantic versiyon tag'ini bulur
- Branch Analizi: Branch adını veya merge commit mesajını inceler
- Versiyon Hesaplama: Uygun artırma kuralını uygular
- Tag Oluşturma: Üretilen versiyonla yeni git tag'i oluşturur
Deployment Stratejisi
Ortam Eşleştirme
- Development:
developbranch →serender-testnamespace - Testing:
testbranch →serender-testnamespace - Production:
mainbranch →serender-prodnamespace
Deployment Süreci
- Image Tag Güncelleme: Kubernetes deployment manifest'ini günceller
- Rolling Update: Sıfır kesinti ile deployment gerçekleştirir
- Health Check'ler: Pod hazırlığı ve servis erişilebilirliğini izler
- Rollback Desteği: Deployment başarısızlığında otomatik geri alma
İzleme ve Loglama
- Deployment Durumu: Gerçek zamanlı rollout izleme
- Versiyon Takibi: Git SHA ve versiyon loglaması
- Namespace Doğrulama: Ortam onaylaması
Ön Gereksinimler
Repository Secret'ları
GitHub repository ayarlarında aşağıdaki secret'ları yapılandırın:
| Secret Adı | Açıklama | Gerekli Olan |
|---|---|---|
DOCKERHUB_USERNAME |
Docker Hub kullanıcı adı | Docker registry push |
DOCKERHUB_TOKEN |
Docker Hub erişim token'ı | Docker registry push |
SONAR_TOKEN |
SonarQube kimlik doğrulama token'ı | Kod kalitesi analizi |
SONAR_HOST_URL |
SonarQube sunucu URL'si | Kod kalitesi analizi |
Self-hosted Runner Gereksinimleri
- Docker Engine Buildx desteği ile
- kubectl Kubernetes cluster'ları için yapılandırılmış
- .NET 9.0 SDK
- Java 17 (SonarQube analizi için)
Kubernetes Cluster Kurulumu
- Yapılandırılmış namespace'ler (
serender-test,serender-prod) - Deployment manifest'leri (
banking-deployment) - Uygun izinlere sahip service account
Sorun Giderme
Yaygın Sorunlar
1. Docker Build Hataları
Belirtiler: Docker image oluşturma sırasında build başarısız oluyor Çözümler: - Dockerfile syntax ve path'leri kontrol edin - Base image erişilebilirliğini doğrulayın - Runner'da yeterli disk alanı olduğundan emin olun
2. Versiyon Üretim Sorunları
Belirtiler: Yanlış versiyon numaraları veya duplike tag'ler Çözümler: - Git tag formatının semver'i takip ettiğini doğrulayın (v1.2.3) - Branch adlandırma konvansiyonlarını kontrol edin - Checkout action'da fetch-depth: 0 olduğundan emin olun
3. Kubernetes Deployment Hataları
Belirtiler: Deployment rollout timeout'ları veya başarısızlıkları Çözümler: - kubectl konfigürasyonu ve izinlerini doğrulayın - Kubernetes cluster sağlığını kontrol edin - Deployment manifest syntax'ini validate edin
4. SonarQube Analiz Hataları
Belirtiler: Kod kalitesi analizi başarısız oluyor veya raporlar eksik Çözümler: - SonarQube sunucu bağlantısını doğrulayın - Kimlik doğrulama token'larını kontrol edin - Test coverage dosyalarının üretildiğinden emin olun