Gradle Build Cache: Yerel Hızı Satın Almanın Gerçek Fiyatı

Gradle build cache ilk duyduğunuzda harika geliyor: daha önce derlenmiş görevleri atla, aynı kodu tekrar derleme. Yerel makinede gerçekten işe yarıyor da. Ama CI/CD pipeline'ına koyunca olay başlıyor.

Bilgisayarınızda build cache tutarlı. Dosya yolları sabit, ortam değişkenleri aynı, JDK sürümü değişmiyor. Gradle bir task'ı çalıştırdı mı, çıktısını cache'e koyuyor. Sonra aynı kodu değiştirmeden derlerseniz, cache'den alıyor. bu kadar basit.

Gerçek fayda: 3-4 dakikalık build 20 saniyeye inebiliyor. Büyük projelerde bu dev deneyimini değiştiriyor.

Pipeline her çalıştığında yeni bir container ya da VM'de işler. Cache dosyaları orada yok. Gradle cache'i sıfırdan başlatmak zorunda kalıyor. Hatta Docker layer'ları, artifact repository'ler, network gecikmeler devreye giriyor.

Daha kötü: eğer build cache'i artifact repository'de (Gradle Enterprise, Artifactory) tutmaya çalışırsanız, network I/O o kadar ağır hale gelebilir ki, cache olmayan bir build daha hızlı olur.

Gördüğüm gerçek case: bir şirket local cache'i açtıktan sonra CI/CD build süresi %15 arttı. Cache'i kapatınca normal oldu.

Gradle cache hit oranı CI/CD'de düşük kalır. Neden? Çünkü:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

- Dependency versiyonları dinamik kalabilir (snapshot, range).
- Git checkout'tan sonra dosya timestamps değişir.
- Environment değişkenleri container'da farklı olabilir.
- Gradle daemon her çalıştırmada yeniden başlar.

Yani cache'i populate etmek için çok zaman harcarken, hit oranı %20-30 kalabiliyor.

Yerel makinede cache açın, hiç tereddüt etmeyin. Orada saf kazanç.

CI/CD'de? Eğer Gradle Enterprise gibi bir remote cache backend'iniz varsa ve buna ciddi resource ayırabiliyorsanız, deneyebilirsiniz. Ama çoğu şirket için şu daha pratik:

- Cache'i kapalı tutun (org.gradle.caching=false).
- Yerine artifact cache'i (dependency download cache) optimize edin. Bu daha stabil ve hızlı.
- Build parallelism'i arttırın. Gradle `--parallel` flag'ı ve `org.gradle.parallel=true` daha güvenilir bir hızlanma sağlar.

Gradle build cache yerel ortamda harika, ama CI/CD'de beklentinizi yönetin. "Tüm pipeline'da cache açalım" düşüncesi sıkça yanlış sonuç verir. Yerel ve CI/CD için farklı stratejiler tutun; birini diğerine zorlamayın.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz