Sonatype Nexus Repository - Gradle Entegrasyonu

Özellikle CI/CD süreçlerinin yaygınlaştığı günümüzde, bağımlılıkların güvenli, tutarlı ve izlenebilir biçimde yönetilmesi kritik önem taşımaktadır. Bu ihtiyacı karşılayan repository yöneticileri, yazılım artifact’ları için merkezi bir kontrol noktası oluşturarak build sürelerinin kısalmasını, sürüm tutarlılığını ve otomasyon süreçlerinin sağlıklı şekilde işlemesini mümkün kılar.

Nexus Repository Nedir?

Nexus Repository, yazılım geliştirme sürecinde kullanılan tüm bileşenleri (kütüphaneler, paketler, build çıktıları, container imajları vb.) merkezi olarak saklayan ve yöneten evrensel bir repository yöneticisidir. Kurum içindeki tüm yazılım bileşenleri için tek, kontrollü bir “kayıt sistemi” (single source of truth) görevi görür.

Nexus Repository’nin Başlıca Kullanım Alanları

  • Dış (Maven Central, npm, PyPI, NuGet vb.) ve iç paketleri tek noktadan yönetme
  • Uzak depolardaki bileşenleri proxy’leyip cache’leyerek build sürelerini kısaltma ve ağ bağımlılığını azaltma Bir geliştirici bir paketi ilk kez çektiğinde Nexus bu paketi cache’ler; sonraki tüm geliştiriciler paketi çok daha hızlı şekilde Nexus üzerinden indirir.
  • Erişim kontrolleri ve politikalarla güvenliği artırma, riskli veya onaylanmamış bileşenleri engelleme
  • CI/CD boru hatlarıyla entegre olarak artifact yaşam döngüsünü otomatikleştirme

Bu yazıda, Sonatype Nexus Repository ile Gradle kullanılarak derlenen örnek bir proje üzerinde entegrasyonun nasıl yapılacağını adım adım ele alacağız.

  1. Maven Proxy Repository’lerinin Oluşturulması

Nexus Repository arayüzünden:

Administrator → Repository → Create Repository adımlarını izleyerek, projede kullanılan repository’leri proxy repository olarak tanımlıyoruz.

captionless image

Maven kütüphanesi olması nedeniyle, format olarak maven2 seçiyoruz.

captionless image

Proxy url kısmına Google’ın Android ve Google servislerine ait kütüphanelerin yayınladığı maven repository adresini tanımlıyoruz.

captionless image

Aynı şekilde, Maven central kütüphanelerinin bulunduğu repository adresini tanımlıyoruz.

captionless image

Proxy Repository

  • Uzak bir repository’ye (ör. Maven Central, nuget.org, Anaconda, Docker Hub) bağlı çalışır.
  • İstenen bileşen önce local cache’te aranır; yoksa uzak repodan çekilip proxy’de saklanır.
  • Aynı bileşen tekrar istendiğinde artık yerelden servis edilir (daha hızlı ve daha az ağ trafiği).

Group Repository

  • Birden fazla proxy ve/veya hosted repository’yi tek bir URL altında birleştirir.
  • Geliştirici tarafında tek kaynak tanımlanır; arka planda tüm üye repolar taranır.

2- Proxy Repository’lerin Group Repository Altında Birleştirilmesi

Bu repository’leri ayrı ayrı maven2 (proxy) tipinde oluşturduk. Şimdi ise bunları tek bir repository altında toplamak için repository type olarak maven2 (group) yöntemini kullanacağız.

Oluşturmuş olduğumuz proxy repository’leri Members kısmına ekleyerek kaydediyoruz. Böylelikle iki repository’yi tek bir repository üzerinden kullanabiliyor olacağız.

captionless image

Repository sekmesine gelerek oluşturduğumuz group repository için Copy butonuyla repository URL’ini kopyalıyoruz.

captionless image

3 - Repository’nin Gradle Build dosyasına entegrasyonu

Tanımladığımız repository’yi projeye entegre etmemiz gerekiyor. Projedeki settings.gradle.kts dosyasına, kopyalamış olduğumuz repository URL’ini ekliyoruz.

captionless image

Sonrasında gradle build --info komutu ile build işlemini tetiklediğimizde, info çıktılarında tanımladığımız repository URL’i üzerinden kütüphanelerin çekildiğini görüyoruz.

captionless image

Nexus Repository arayüzünde de çekilen paketleri görüntüleyebiliyoruz. Cache’de tutulan bu paketler, sonraki build işlemlerinde hız kazandıracaktır.

captionless image

Written by

İrfan Karaduman