DevOps, yazılım geliştirme (Dev) ve operasyon (Ops) ekiplerini bir araya getirerek yazılımın daha hızlı, güvenilir ve sürekli olarak müşteriye ulaşmasını sağlayan bir kültür ve pratikler bütünüdür. CI/CD (Continuous Integration / Continuous Delivery) ise bu kültürün teknik omurgasıdır. Bu rehberde sıfırdan CI/CD pipeline kurulumunu adım adım anlatıyoruz.
CI/CD Nedir?
Continuous Integration (CI)
Geliştiricilerin kodlarını günde birkaç kez ana dalda (main branch) birleştirmesi ve her birleştirmede otomatik testlerin çalışmasıdır. Amaç: hataları erken yakalamak, entegrasyon sorunlarını önlemek.
Continuous Delivery (CD)
Test geçen kodun otomatik olarak staging ortamına deploy edilmesi, tek tıkla üretime alınabilmesidir. Continuous Deployment ise üretime kadar olan tüm süreci tamamen otomatize eder.
Gerekli Araçlar
- Kaynak kod yönetimi: Git (GitHub, GitLab veya Bitbucket)
- CI/CD aracı: GitHub Actions, GitLab CI, Jenkins veya CircleCI
- Konteynerizasyon: Docker — uygulamayı çalışma ortamıyla birlikte paketler
- Container registry: Docker Hub, GitHub Container Registry veya Harbor
- Orkestrasyon: Kubernetes (K8s) — konteynerleri ölçeklendirir ve yönetir
- Altyapı olarak kod: Terraform veya Pulumi — altyapıyı kod olarak tanımlar
Adım 1: Dockerfile Oluşturma
Uygulamanızı konteyner olarak paketlemek için bir Dockerfile oluşturun. Multi-stage build ile image boyutunu minimize edin. Örneğin bir Next.js uygulaması için: build aşamasında node_modules ve derleme, runner aşamasında sadece production dosyaları. Bu yaklaşım image boyutunu %60-70 küçültür.
Adım 2: GitHub Actions Pipeline
Repository'de .github/workflows/ci.yml dosyası oluşturun. Temel bir pipeline şu adımlardan oluşur:
- Trigger: main ve develop dallarına push veya PR açıldığında tetikle
- Checkout: Kodu çek
- Setup: Node.js, Python veya Java ortamını kur
- Install: Bağımlılıkları yükle (npm ci, pip install)
- Lint: Kod kalitesi kontrolü (ESLint, Prettier)
- Test: Unit test, integration test çalıştır
- Build: Docker image oluştur
- Push: Image'ı container registry'ye gönder
- Deploy: Kubernetes'e veya staging ortamına deploy et
Adım 3: Test Otomasyonu
CI pipeline'ının en değerli parçası otomatik testlerdir:
- Unit testler: Jest, Vitest, pytest — her fonksiyonun doğru çalıştığını doğrular
- Integration testler: API endpoint'lerinin veritabanı ve harici servislerle doğru iletişim kurduğunu test eder
- E2E testler: Playwright veya Cypress — kullanıcı senaryolarını tarayıcıda simüle eder
- Güvenlik taraması: OWASP ZAP veya Snyk ile bağımlılık ve kod güvenlik taraması
- Coverage: Minimum %80 test coverage hedefleyin, PR'lar coverage düşürüyorsa bloklayın
Adım 4: Kubernetes Deployment
Test geçen ve build edilen image'ı Kubernetes'e deploy etmek için:
- Deployment manifest: replicas, resource limits, liveness/readiness probe tanımları
- Service: Pod'ları ağda expose eden servis tanımı (ClusterIP, LoadBalancer)
- Ingress: Domain bazlı trafik yönlendirme (nginx-ingress veya Traefik)
- Helm chart: Tüm Kubernetes kaynaklarını tek bir paket olarak yönetme, ortam bazlı values dosyaları
Deployment stratejisi olarak Rolling Update (sıfır downtime) veya Canary (küçük bir yüzdeye yeni sürüm, sorun yoksa kademeli artış) tercih edilebilir.
Adım 5: Monitoring ve Alerting
Pipeline deploy ettikten sonra iş bitmez — uygulamayı izlemek gerekir:
- Metrikler: Prometheus ile CPU, bellek, istek sayısı ve latency metriklerini toplama
- Dashboard: Grafana ile görsel dashboard oluşturma
- Log yönetimi: Loki veya ELK (Elasticsearch, Logstash, Kibana) ile merkezi log toplama
- Alerting: Belirli eşik değerler aşıldığında Slack/e-posta bildirimi
- Error tracking: Sentry ile uygulama hatalarını gerçek zamanlı izleme
En İyi Pratikler
- Her PR için ayrı preview environment oluşturun (Vercel, Netlify veya K8s namespace)
- Secrets yönetimi için GitHub Secrets, HashiCorp Vault veya AWS Secrets Manager kullanın
- Pipeline süresini 10 dakikanın altında tutmaya çalışın — paralel test ve caching ile hızlandırın
- Trunk-based development uygulayın — uzun ömürlü feature branch'lerden kaçının
- Database migration'larını CI pipeline'ına dahil edin
- Rollback planınız olsun — tek komutla önceki sürüme dönebilmelisiniz
Sonuç
CI/CD pipeline, modern yazılım geliştirmenin olmazsa olmazıdır. İlk kurulumda zaman alsa da uzun vadede hız, güvenilirlik ve kalite açısından katlanarak geri döner. Marta Teknoloji olarak GitHub Actions, GitLab CI, Docker ve Kubernetes tabanlı CI/CD pipeline kurulumu, mevcut süreçlerin otomasyonu ve DevOps danışmanlığı konularında hizmet veriyoruz.
