CI/CD Pipeline: Sürekli Entegrasyon ve Sürekli Dağıtım
CI/CD (Continuous Integration/Continuous Deployment), yazılım geliştirme sürecini otomatikleştirir ve hızlandırır. Bu rehberde CI/CD pipeline'larının temellerini ve implementasyonunu anlatıyoruz.
Son güncelleme:CI/CD Nedir?
CI (Continuous Integration): Geliştiricilerin kod değişikliklerini sık sık (günde birkaç kez) ana branch'e merge etmesi ve otomatik test çalıştırması.
CD (Continuous Deployment/Delivery): Kod değişikliklerinin otomatik olarak test edilip production'a deploy edilmesi. Delivery'de manuel onay, Deployment'da tam otomasyon.
Faydalar: Daha hızlı release cycle, daha az hata, daha güvenilir deploy'lar, geliştirici verimliliği artışı.
Pipeline: Kod commit → Build → Test → Deploy adımlarından oluşan otomatik iş akışı.
CI Pipeline Aşamaları
Source: Kod repository'sinden (GitHub, GitLab, Bitbucket) değişiklikleri çekin. Webhook ile otomatik tetikleme.
Build: Kodu derleyin ve bağımlılıkları yükleyin. npm install, npm run build. Build artifact'ları (Docker image, binary) oluşturun.
Test: Unit test, integration test ve end-to-end test çalıştırın. Test coverage raporu oluşturun. Coverage threshold'u kontrol edin.
Code quality: Linting (ESLint), type checking (TypeScript), security scanning (Snyk, Dependabot). Code quality gate'leri tanımlayın.
Artifact: Build artifact'larını registry'ye (Docker Hub, npm registry, S3) push edin. Version tag'leri ekleyin.
CD Pipeline Aşamaları
Staging deploy: Artifact'ı staging ortamına deploy edin. Otomatik smoke test çalıştırın.
Manual approval: Production deploy için manuel onay (Continuous Delivery). Onay sonrası otomatik deploy.
Production deploy: Blue-green deployment, canary release veya rolling update ile sıfır downtime deploy.
Post-deploy: Health check, monitoring, alerting. Deploy başarısız olursa otomatik rollback.
Notification: Slack, email veya Teams ile deploy durumu bildirimi. Başarılı/başarısız deploy'lar için farklı kanallar.
Popüler CI/CD Araçları
GitHub Actions: GitHub repository'lerinde native CI/CD. YAML workflow dosyaları ile yapılandırılır. Ücretsiz tier mevcut.
GitLab CI: GitLab repository'lerinde native CI/CD. .gitlab-ci.yml ile yapılandırılır. Docker runner desteği.
Jenkins: Self-hosted, açık kaynak CI/CD. Groovy pipeline script'leri ile yapılandırılır. Plugin ekosistemi çok geniş.
CircleCI: Cloud-based CI/CD. Hızlı build'ler ve paralel test desteği. config.yml ile yapılandırılır.
ArgoCD: Kubernetes için GitOps CD aracı. Git repository'sini source of truth olarak kullanır. Otomatik sync ve rollback.
Best Practices
Pipeline as Code: Pipeline yapılandırmasını kod olarak (YAML) saklayın. Version control ile takip edin.
Fast feedback: Pipeline'ı hızlı tutun (10 dakikadan az). Paralel test çalıştırın. Cache kullanın (node_modules, Docker layers).
Security: Secret'ları (API key, password) environment variable veya secret manager (Vault, AWS Secrets Manager) ile yönetin. Kod içine hardcode etmeyin.
Idempotency: Pipeline'ı birden fazla çalıştırmak aynı sonucu vermeli. Deploy script'leri idempotent olmalı.
Monitoring: Pipeline metriklerini izleyin: build süresi, test başarı oranı, deploy frekansı, MTTR (Mean Time to Recovery).
GitOps ve Infrastructure as Code
GitOps: Git repository'sini single source of truth olarak kullanın. Tüm altyapı ve uygulama değişiklikleri Git üzerinden yönetilir.
Terraform: Infrastructure as Code aracı. Cloud kaynaklarını (VM, database, network) kod olarak tanımlayın ve yönetin.
Kubernetes: Container orchestration platform. Deployment, Service, Ingress gibi resource'ları YAML ile tanımlayın.
Helm: Kubernetes için package manager. Chart'lar ile uygulama deploy'larını parametrize edin.
ArgoCD/Flux: Git repository'sini izleyin ve Kubernetes cluster'ına otomatik sync yapın. Drift detection ve auto-healing.