Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Pipeline'da Test: Hızlı Geri Bildirim, Quality Gate'ler ve Flaky Test'ler
Testleri pipeline'a ucuzdan pahalıya dizmek (format, unit, Testcontainers ile integration, Playwright ile e2e) ve uyarı, coverage ve bundle budget gibi quality gate'leri eklemek hızlı ve güvenilir geri bildirim verir; flaky test'i retry ile örtmek yerine kökünü bulmak gerekir. Assertion'sız testin coverage'ı nasıl şişirdiği, 30 koşuda 2 kez kırılan gerçek bir flaky test ve boş kalan Playwright shard'ı.
Build Once, Deploy Many: Artifact, Versiyonlama ve Immutable Paket
Artifact'ı bir kez build edip aynısını, tag'i ya da digest'iyle staging'den production'a taşımak, staging'de test edilen şeyin production'a gitmesini garanti eder; aynı commit'ten iki kez build almak bile farklı image üretir. Lock dosyaları ve npm ci ile reproducible build, SHA ile sürüm damgalama, :latest tuzağı ve Angular için runtime config.json.
Pipeline Anatomisi: Trigger, Stage, Job, Step ve Fail Fast
Bir pipeline trigger'larla başlar, birbirine bağımlı job'lardan (Jenkins'te stage) ve sırayla koşan step'lerden oluşur; build mantığını lokalde çalışan bir script'e koyup pipeline'ı sadece orkestra şefi yapmak, ucuz kontrolleri öne almak ve paralel dallarda fail fast kullanmak geri bildirimi hızlandırır. GitHub Actions, Jenkins ve Azure DevOps terim eşlemesi, act ve Jenkins ile koşulmuş gerçek çıktılar.
CI, Continuous Delivery ve Continuous Deployment: Farkları ve Neden Önemli
CI, herkesin işini her gün mainline'a entegre edip her push'ta otomatik build ve test koşturmaktır; continuous delivery her commit'i release edilebilir tutar ve production'a çıkışı bir karara bırakır, continuous deployment ise o butonu da kaldırır. Integration hell senaryosu, Fowler'ın 2024 pratikleri, act ile koşulmuş bir CI workflow'u ve MinimumCD kontrol listesi.
ASP.NET Core Web API'yi Docker'a Almak ve GitHub Actions ile CI/CD Kurmak
ASP.NET Core Web API'yi multi-stage Dockerfile ile container'a alıyoruz: dotnet publish, layer cache'i, .dockerignore, port ve environment ayarları; ardından GitHub Actions ile test edip imajı ghcr.io'ya gönderen bir CI/CD pipeline'ı kuruyoruz.