İçeriğe geç
NetDevOps
11 dk okuma DevOps

Renovate Bot: Otomatik Bağımlılık Güncelleme Rehberi

Modern yazılım geliştirme süreçlerinde bağımlılık yönetimi, projelerin sürdürülebilirliği ve güvenliği açısından kritik bir rol oynamaktadır. Her gün onlarca güvenlik açığı keşfedilmekte, kütüphaneler güncellenmekte ve yeni sürümler yayınlanmaktadır. Bu durum, özellikle büyük mikroservis mimarilerinde ve çoklu kütüphane kullanan projelerde bağımlılık takibini oldukça zorlaştırmaktadır. İşte tam bu noktada Renovate, geliştirici ekiplerin bağımlılık güncellemelerini otomatikleştiren güçlü bir araç olarak karşımıza çıkmaktadır. Bu makalede, Renovate'in ne olduğunu, nasıl kurulduğunu, yapılandırma seçeneklerini ve üretim ortamında nasıl etkili bir şekilde kullanılabileceğini detaylı olarak inceleyeceğiz.

Renovate Nedir ve Neden Kullanılmalıdır?

Renovate, Mend (eski adıyla WhiteSource) tarafından geliştirilen açık kaynak kodlu bir bağımlılık güncelleme otomasyon aracıdır. GitHub, GitLab, Bitbucket gibi popüler version kontrol sistemleriyle entegre çalışarak, projelerdeki bağımlılıkların güncel kalmasını sağlar. Geleneksel yöntemlerde geliştiricilerin manuel olarak bağımlılıkları kontrol etmesi ve güncellemesi gerekirken, Renovate bu süreci tamamen otomatikleştirir ve sürekli güncel kalmayı garanti eder.

Otomatik Güncelleme Avantajları

Bağımlılık güncellemelerini otomatikleştirmenin birçok kritik avantajı bulunmaktadır. İlk olarak, güvenlik açıklarına karşı projenin korunması sağlanır. Bilinen bir güvenlik açığı varsa, Renovate bu açığı içeren kütüphaneyi tespit eder ve güncellenmiş sürümü içeren bir pull request oluşturur. Bu sayede, bilinen güvenlik açıklarıyla projeler uzun süreler boyunca yaşamaz ve saldırılara karşı savunmasız kalmaz.

İkinci önemli avantaj, teknik borcun azaltılmasıdır. Güncellenmeyen bağımlılıklar zamanla eskir ve projeyi yükseltmeyi zorlaştırır. Büyük sürüm atlamaları yapmak, arada çok sayıda breaking change bulunduğu için oldukça riskli ve zaman alıcı olabilir. Renovate, küçük ve düzenli güncellemeler yaparak bu teknik borcun birikmesini önler.

Üçüncü olarak, geliştirici süresinden tasarruf sağlanır. Her bağımlılık güncellemesini manuel olarak araştırmak, test etmek ve uygulamak ciddi zaman harcar. Renovate bu işlemi otomatikleştirerek, geliştiricilerin daha değerli işlere odaklanmasını sağlar.

Desteklenen Platformlar ve Diller

Renovate, oldukça geniş bir platform ve dil yelpazesi desteklemektedir. GitHub, GitLab, Bitbucket Cloud, Bitbucket Server, Azure DevOps, AWS CodeCommit, Gitea ve Forgejo gibi popüler platformlarla entegrasyon sunar. Desteklenen programlama dilleri arasında JavaScript/TypeScript, Python, Go, Rust, Java, .NET, PHP, Ruby ve daha birçok dil bulunmaktadır. Ayrıca Docker, Kubernetes, Terraform, Helm, GitHub Actions ve GitLab CI/CD gibi altyapı araçları için de bağımlılık yönetimi sağlar.

Renovate Kurulum Yöntemleri

Renovate'i kullanmanın birkaç farklı yolu bulunmaktadır. En yaygın kullanılan yöntemler Mend Renovate uygulamasını doğrudan GitHub'a veya GitLab'a kurmak, Docker container olarak çalıştırmak veya npm paketi olarak yerel olarak kurmaktır. Her yöntemin kendine özgü avantajları ve kullanım senaryoları vardır.

Mend Renovate Uygulaması ile Kurulum

GitHub kullanıcıları için en basit yöntem, Mend Renovate uygulamasını GitHub hesabınıza veya organizasyonunuza kurmaktır. Bu yöntemde herhangi bir sunucu yapılandırması yapmanıza gerek yoktur ve Renovate tüm işlemleri GitHub'ın altyapısı üzerinde gerçekleştirir. Uygulamayı kurmak için GitHub Marketplace'e gidip Renovate'i aratarak "Install" butonuna tıklamanız yeterlidir. Kurulum sonrasında, Renovate otomatik olarak depolarınızı tarar ve config dosyası bulunan projeler için otomatik olarak onboarding sürecini başlatır.

GitLab kullanıcıları için ise Renovate'i GitLab'a bir uygulama olarak kaydetmeniz gerekmektedir. GitLab'da yeni bir OAuth uygulaması oluşturup, gerekli izinleri verdikten sonra Renovate'i bu uygulama üzerinden çalıştırabilirsiniz.

Docker ile Kendi Kendine Barındırma

Kendi altyapınızda Renovate çalıştırmak istediğinizde, Docker en pratik çözümlerden biridir. Resmi Renovate Docker imajı Docker Hub üzerinde renovate/renovate adresinden erişilebilir durumdadır. Temel bir Docker çalıştırması için aşağıdaki komutu kullanabilirsiniz:

docker run --rm -v Renovate/renovate

Spesifik bir sürümü kullanmak için tag belirtebilirsiniz:

docker run --rm renovate/renovate:44
docker run --rm renovate/renovate:44.52
docker run --rm renovate/renovate:44.52.1

Kendı yapılandırma dosyanızı kullanmak için volume mount edebilirsiniz:

docker run --rm -v "/path/to/your/config.js:/usr/src/app/config.js" renovate/renovate

Docker Compose ile daha karmaşık yapılandırmalar oluşturmak mümkündür. Örneğin, ortam değişkenlerini bir .env dosyasından yükleyebilir ve sürekli çalışan bir Renovate servisi tanımlayabilirsiniz.

Kubernetes'te Çalıştırma

Büyük organizasyonlarda Renovate'i Kubernetes üzerinde çalıştırmak, ölçeklenebilirlik ve yönetim kolaylığı sağlar. Bir Kubernetes CronJob olarak yapılandırmak, Renovate'in düzenli aralıklarla çalışmasını sağlar. Öncelikle bir Secret oluşturulmalıdır:

apiVersion: v1
kind: Secret
metadata:
  name: renovate-env
type: Opaque
stringData:
  RENOVATE_GITHUB_COM_TOKEN: 'your-personal-access-token'
  RENOVATE_AUTODISCOVER: 'false'
  RENOVATE_ENDPOINT: 'https://github.company.com/api/v3'
  RENOVATE_GIT_AUTHOR: 'Renovate 

Ardından bir ConfigMap ile Renovate yapılandırması tanımlanmalıdır:

apiVersion: v1
kind: ConfigMap
metadata:
  name: renovate-config
data:
  config.json: |-
    {
      "repositories": ["orgname/repo", "username/repo"],
      "dryRun": "full"
    }

Son olarak, CronJob tanımı yapılarak Renovate'in saatlik olarak çalışması sağlanır:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: renovate-bot
spec:
  schedule: '@hourly'
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - image: renovate/renovate:44.52.1
              name: renovate-bot
              env:
                - name: RENOVATE_PLATFORM
                  value: 'github'
                - name: RENOVATE_TOKEN
                  value: 'some-token'
                - name: RENOVATE_AUTODISCOVER
                  value: 'false'
                - name: RENOVATE_CONFIG_FILE
                  value: '/opt/renovate/config.json'
              volumeMounts:
                - name: config-volume
                  mountPath: /opt/renovate/
          restartPolicy: Never
          volumes:
            - name: config-volume
              configMap:
                name: renovate-config

Renovate Yapılandırması

Renovate'in davranışını özelleştirmek için renovate.json veya renovate.json5 yapılandırma dosyaları kullanılır. Bu dosyalar, hangi paket yöneticilerinin taranacağı, güncelleme sıklığı, otomatik birleştirme kuralları ve daha birçok seçenek için kullanılır.

Temel Yapılandırma Seçenekleri

En temel yapılandırma, hangi paket yöneticilerinin kullanılacağını belirten extends dizisidir:

{
  "extends": ["config:recommended"]
}

Bu temel yapılandırma, Renovate'in otomatik olarak tüm yaygın paket yöneticilerini taramasını ve güncelleme önerileri oluşturmasını sağlar. Daha spesifik yapılandırmalar için aşağıdaki seçenekler kullanılabilir:

packageRules dizisi, belirli paketler veya paket grupları için özel kurallar tanımlamanızı sağlar. Örneğin, belirli bir kütüphanenin sadece güvenlik güncellemelerini almasını veya belirli bir sürüm aralığında kalmasını isteyebilirsiniz:

{
  "packageRules": [
    {
      "matchPackagePatterns": ["*"],
      "matchUpdateTypes": ["minor", "patch"],
      "automerge": true
    },
    {
      "matchPackagePatterns": ["react", "react-dom"],
      "matchUpdateTypes": ["major"],
      "stabilityDays": 14
    }
  ]
}

Bu yapılandırma, küçük ve yama güncellemelerinin otomatik olarak birleştirilmesini sağlarken, React gibi ana paketlerin major güncellemeleri için 14 gün bekleme süresi ekler.

Zamanlama ve Sıklık Ayarları

Renovate'in ne sıklıkla çalışacağını ve pull request oluşturacağını yapılandırmak önemlidir. schedule alanı, Renovate'in aktif olacağı zamanları belirler:

{
  "schedule": ["after 10pm and before 5am every weekday"],
  "timezone": "Europe/Istanbul"
}

Bu yapılandırma, Renovate'in Türkiye saatine göre hafta içi saat 22:00 ile 05:00 arasında çalışmasını sağlar. Bu sayede, güncellemeler mesai saatleri dışında oluşturulur ve ekiplerin normal çalışma akışı etkilenmez.

Farklı zamanlama seçenekleri de mevcuttur:

{
  "schedule": ["every weekend"],
  "schedule": ["before 8am on the first day of the month"],
  "schedule": ["every 3 months on the 1st day of the month"]
}

Otomatik Birleştirme Ayarları

Otomatik birleştirme (automerge), Renovate'in oluşturduğu pull request'lerin belirli koşullar sağlandığında otomatik olarak ana dal ile birleştirilmesini sağlar. Bu özellik, özellikle düşük riskli güncellemelerin (yamalarda ve küçük güncellemelerde) hızlı bir şekilde projeye entegre edilmesini sağlar:

{
  "automerge": true,
  "automergeType": "pr-comment",
  "prBodyNotes": [
    "This PR has been generated by Renovate Bot."
  ]
}

Daha güvenli bir yaklaşım için, testlerin geçmesini bekleyebilirsiniz:

{
  "automerge": true,
  "requiredStatusChecks": ["ci/test", "ci/build"],
  "prCreation": "not-pending"
}

Bu yapılandırma, sadece tüm CI testleri başarılı olduktan sonra otomatik birleştirme yapar.

GitHub Actions Entegrasyonu

Renovate, GitHub Actions workflow'larınızı da güncelleyebilir. Bu, özellikle action'ların en son sürümlerini kullanmak ve güvenlik açıklarını yamamak için kritik öneme sahiptir:

{
  "packageRules": [
    {
      "matchManagers": ["github-actions"],
      "matchUpdateTypes": ["major"],
      "stabilityDays": 7
    },
    {
      "matchManagers": ["github-actions"],
      "matchUpdateTypes": ["minor", "patch"],
      "automerge": true
    }
  ]
}

GitHub Actions için digest pinning de önemlidir. Bu özellik, action'ların belirli commit SHA'larına kilitlenmesini sağlar:

{
  "github-actions": {
    "pinDigests": true
  }
}

Bu ayar, action'ların her zaman belirli ve doğrulanmış commit'leri kullanmasını garanti eder.

YAML ve Kubernetes Yapılandırması

Renovate, Kubernetes YAML dosyalarını ve Kustomize overlay'lerini de yönetebilir. Ancak, Kubernetes manifest'lerinin dosya yapısı standart olmadığından, Renovate'in bu dosyaları bulabilmesi için özel yapılandırma gerekir:

{
  "kubernetes": {
    "managerFilePatterns": ["/k8s/.+\\.yaml$/"]
  }
}

Bu yapılandırma, k8s/ dizini içindeki tüm YAML dosyalarını Renovate'in taramasını sağlar. Alternatif olarak, belirli bir dosya kalıbı kullanabilirsiniz:

{
  "kubernetes": {
    "managerFilePatterns": ["/^deployments\\/.*\\.yaml$/"]
  }
}

Kustomize kullanıyorsanız, Renovate doğrudan kustomization.yaml dosyalarını okuyabilir:

{
  "packageRules": [
    {
      "matchManagers": ["kustomize"],
      "matchPackagePatterns": ["*"],
      "stabilityDays": 3
    }
  ]
}

En İyi Uygulamalar ve İpuçları

Renovate'i etkili bir şekilde kullanmak için bazı en iyi uygulamaları takip etmek önemlidir. İlk olarak, config dosyasını küçük adımlarla oluşturmak önerilir. Tüm özellikleri aynı anda etkinleştirmek yerine, temel yapılandırmayla başlayıp kademeli olarak özelleştirmek daha güvenlidir.

Dry Run Modu

Yeni yapılandırmaları test etmek için dryRun modunu kullanabilirsiniz:

{
  "dryRun": "full"
}

Bu mod, Renovate'in pull request oluşturmadan önce yapacağı işlemleri simüle eder ve size bir rapor sunar. Bu sayede, yapılandırma hatalarını veya beklenmedik davranışları önceden tespit edebilirsiniz.

Regex Manager ile Özel Yapılandırma

Standart paket yöneticileri dışında kalan bağımlılıkları yönetmek için Regex Manager kullanılabilir:

{
  "regexManagers": [
    {
      "fileMatch": ["^Dockerfile$"],
      "matchStrings": ["ENV (?

Bu yapılandırma, Dockerfile'daki ENV değişkenlerini izler ve güncellemeleri takip eder.

Labels ve Reviewers

Oluşturulan pull request'lerin doğru kişiler tarafından incelenmesi için labels ve reviewers ayarlanabilir:

{
  "labels": ["dependencies", "renovate"],
  "addLabels": ["security-update"],
  "assignees": ["username"],
  "reviewers": ["team:backend"]
}

Bu yapılandırma, tüm Renovete pull request'lerine "dependencies" ve "renovate" etiketlerini ekler, güvenlik güncellemeleri için "security-update" ekler ve belirli kullanıcıları atar.

Yaygın Sorunlar ve Çözümleri

Renovate kullanırken karşılaşılabilecek yaygın sorunlar ve bunların çözümleri hakkında bilgi sahibi olmak, sorunsuz bir deneyim için önemlidir.

Yanlış Sürüm Algılama

Bazı durumlarda Renovate, paketin doğru sürümünü algılayamayabilir. Bu durumda versioningTemplate kullanarak sürümleme formatını belirtebilirsiniz:

{
  "packageRules": [
    {
      "matchPackagePatterns": ["custom-package"],
      "versioningTemplate": "semver"
    }
  ]
}

Rate Limiting

API rate limit'lerine takılmamak için prHourlyLimit ve prConcurrentLimit ayarlarını kullanabilirsiniz:

{
  "prHourlyLimit": 5,
  "prConcurrentLimit": 3
}

Bu ayarlar, Renovate'in saatte en fazla 5 pull request oluşturmasını ve aynı anda en fazla 3 pull request üzerinde çalışmasını sağlar.

Özel Registry Kullanımı

Özel npm registry veya private package registry kullanıyorsanız, Renovate'i bu registry'leri kullanacak şekilde yapılandırmanız gerekir:

{
  "npmrc": "registry=https://registry.npmjs.org/",
  "npmrc": "registry=https://npm.mycompany.com/"
}

Bu yapılandırma, Renovate'in belirtilen registry'yi kullanmasını sağlar.

Sonuç

Renovate, modern yazılım geliştirme ekipleri için vazgeçilmez bir araç haline gelmiştir. Bağımlılık güncellemelerini otomatikleştirerek, güvenlik açıklarının hızla yamanmasını, teknik borcun azaltılmasını ve geliştirici verimliliğinin artmasını sağlar. İster Mend'in bulut çözümünü kullanın, ister kendi altyapınızda Docker veya Kubernetes üzerinde çalıştırın, Renovate'in esnek yapılandırma seçenekleri her türlü kullanım senaryosuna uygun çözümler sunar.

Başlangıçta temel yapılandırmayla başlayıp, zaman içinde ihtiyaçlarınıza göre özelleştirmeniz önerilir. Unutmayın, küçük ve düzenli güncellemeler büyük ve riskli sürüm atlamalarından çok daha güvenlidir. Renovate ile bağımlılık yönetimini otomatikleştirerek, projelerinizin her zaman güvenli ve güncel kalmasını sağlayabilirsiniz.

ctCertWatch

SSL sertifika yayınlarını gerçek zamanlı takip eden bir izleme servisi. Regex filtreleme, DNS çözümleme ve webhook uyarıları ile phishing domainlerini, marka taklidini ve yetkisiz sertifikaları anında…

Rust

ipReconary

IP aralıkları, alt ağlar ve ASN bilgilerine dayalı olarak host, domain ve servis keşfi yapan bir ağ keşif (recon) aracı. Güvenlik uzmanları ve OSINT araştırmacıları için ağ altyapısını hızlı ve güveni…

Rust

Wireguard-Server-Panel

Web arayüzüne sahip, kendi sunucunuzda barındırılan bir WireGuard VPN servisi. İstemci yönetimi, mobil bağlantı için QR kod desteği, gerçek zamanlı trafik istatistikleri ve bağlantı kayıtları sunar. T…

LoadAlertTracker

Sistem yükünü neredeyse hiç kaynak tüketmeden izleyen, hafif bir servis. Belirlenen eşikler aşıldığında Telegram, Discord ve Mattermost gibi platformlara gerçek zamanlı uyarı gönderir.

Rust

Trustsslroot

Tek komutla eksiksiz bir özel PKI yapısı (Kök CA → Ara CA → sunucu ve istemci sertifikaları) oluşturan araç. Farklı formatlarda (p12/bks/jks) paketler üretir ve kullanıma hazır çıktı klasörleri sunar.

Go

DDNS-FW

Değişken IP adresini DDNS üzerinden gerçek zamanlı takip eden, hafif ve güvenilir bir araç. İzin verilen IP listelerini otomatik güncelleyerek kesintisiz erişim ve güvenlik sağlar. Tek dosyadan çalışı…

Rust

Cloudfiltred

Sunucu üzerinde 80/443 portlarına erişimi yalnızca Cloudflare IP aralıklarıyla sınırlandıran, tek dosyadan çalışan bir Linux servisi. Kendini kurar, sistem servisi olarak çalışır ve IP listelerini düz…

Rust

node_exporter

Linux için geliştirilmiş, hafif ve tek dosyadan çalışan, güvenli erişim kontrollü bir sistem metrikleri servisi.

Rust