CI Hattı Hızı: Üç Dakika Kuralı ve Dört Hızlandırma Kolu
- Pipeline süresi doğrudan geliştirici deneyimidir. 3 dakikalık bir hat mühendisi odakta tutar; 12 dakikalık bir hat tutmaz.
- Test paralelleştirme en ucuz hızlandırmadır; modern CI koşucularının çoğu bunu doğal olarak destekler.
- Önbelleğe alınmış bağımlılıklar çoğu teknoloji yığınında soğuk başlangıç süresini %50 ila %80 oranında azaltır.
- Bazı testler birleştirme kapısına ait değildir. Onları gece koşularına veya birleştirme sonrası pencerelere taşıyın.
Birlikte çalıştığımız 24 kişilik bir mühendislik ekibinde PR başına CI süresi 14 dakikaydı. Yavaşlama aylar içinde kademeli gerçekleştiği için kimse yüksek sesle şikayet etmiyordu. Etkisini ölçtüğümüzde tablo çarpıcıydı: mühendis başına haftada ortalama 8 PR ve PR başına 2.5 CI koşusu ile ekip haftada 112 saatini CI bekleyerek veya bağlam değiştirerek harcıyordu. Bu, üç tam zamanlı mühendisin dikkatinin her hafta boşa yanması demekti.
Altı haftalık bir çalışmayla aynı test kapsamını koruyarak süreyi 2.8 dakikaya indirdik. Haftalık bekleme maliyeti 22 saate düştü. Üç dakika kuralının arkasındaki gerçek budur: üç dakikanın altında mühendis PR başında kalır; üç dakikanın üzerinde Slack’i açar veya başka bir göreve geçer ve geri dönüş süresi 5 ila 25 dakikaya mal olur.
Kaldıraç 1 ve 2: Paralel Test Koşumu ve Bağımlılık Önbellekleme
Çoğu pipeline’da en büyük hız kazanımı testleri paralel çalıştırmaktan gelir. Testlerin sırayla çalışması nadiren gerekir; pytest-xdist veya jest --maxWorkers gibi araçlarla çekirdek bazında, CI sağlayıcısının matris özellikleriyle makine bazında paralelleştirme yapılabilir. Tek ön koşul test izolasyonudur: her test kendi veritabanı veya dosya kaynağını oluşturup temizlemelidir. Doğru izolasyonla 4 ila 8 kat hızlanma olağandır.
İkinci kaldıraç bağımlılık önbelleklemedir (node_modules, pip önbelleği, Cargo dizinleri veya Docker BuildKit katmanları). Soğuk başlangıçta paket indirme ve derleme çoğu zaman test süresinden uzun sürer. Kilit dosyalarının (package-lock.json vb.) özetini anahtar olarak kullanan doğru bir önbellek stratejisi, kısmi eşleşme (restore-keys) desteğiyle birleştiğinde soğuk başlangıç süresini %50 ila %80 oranında keser.
Kaldıraç 3 ve 4: Değişen Yollara Göre Test Seçimi ve Kapı Temizliği
Bir PR yalnızca faturalandırma modülüne dokunuyorsa tüm test paketini çalıştırmak zorunda değilsiniz. Dosya deseni eşleştirmesi, kapsama tabanlı araçlar (pytest-testmon) veya Bazel gibi derleme sistemleriyle PR aşamasında yalnızca etkilenen testleri koşup, tam paketi main dalına birleştirme sonrasında çalıştırmak hem hızı hem güvenliği sağlar.
Son olarak, birleştirme kapısına ait olmayan testleri CI’dan çıkarın. Gerçek dış servislere giden uçtan uca testler, 10.000 tekrarlı performans testleri ve devasa veri yükleyen testler gece koşularına taşınmalıdır. Bir testin hatası o PR’ın bugün birleşmesini mutlak suretle engellemiyorsa, kritik yolda yeri yoktur. P95 CI süresini bir gösterge panelinde takip edin ve 5 dakikanın üzerindeki sapmaları doğrudan performans hatası olarak ele alın.
Sıkça sorulan sorular
Neden özellikle üç dakika sınırı?
Üç dakika, mühendislerin bağlam değiştirmeye başladığı ampirik eşiktir. Bunun altında PR ekranında beklerler. Üzerine çıktığında yeni bir sekme açıp başka bir işe geçerler ve CI bittikten sonra tekrar PR'a dönmenin odaklanma maliyeti çok yüksektir.
Test paketimiz gerçekten 30 dakika sürüyorsa ne yapmalıyız?
Paketi ikiye bölün. Hızlı testler birleştirme kapısını tutsun (3 dakika). Yavaş ve kapsamlı testler birleştirme sonrasında veya gece hattında çalışsın. Böylece kapsamdan ödün vermeden iterasyon hızını korursunuz.
CI hızı ekibin performans metrikleri arasında olmalı mı?
Evet. '95. yüzdelik CI süresi 5 dakikanın altında' gibi ölçülebilir bir hedef doğru teşviki yaratır. Sayısal bir hedef olmadığında eklenen her yeni testle birlikte CI süresi sessizce uzar.