Ana içeriğe geç

Yan yana

JenkinsvsGitHub Actions

Jenkins ile GitHub Actions arasındaki fark nedir?

Güncellendi 2 dk okuma8 fark

Kısaca

Jenkins, kendiniz barındırıp eklentilerle genişlettiğiniz açık kaynak bir otomasyon sunucusudur; GitHub Actions ise GitHub'ın YAML tabanlı, hazır CI/CD'sidir.

Jenkins

Jenkins, yazılımı pipeline'larla derleyen, test eden ve dağıtan açık kaynaklı bir otomasyon sunucusudur; en eski ve en yaygın CI/CD araçlarından biridir.

Jenkins sayfasını oku

GitHub Actions

GitHub Actions, GitHub'ın yerleşik otomasyon platformudur; depodaki YAML iş akışları push ya da pull request olduğunda test, derleme ve dağıtım çalıştırır.

GitHub Actions sayfasını oku

Jenkins ve GitHub Actions karşılaştırması

ÖzellikJenkinsGitHub Actions
BarındırmaKendi sunucularınızda ya da bulutunuzdaGitHub barındırır; kendi runner'larınız isteğe bağlıdır
Pipeline tanımıGroovy tabanlı sözdizimiyle bir Jenkinsfile.github/workflows içindeki YAML iş akışı dosyaları
Kaynak kontrolHer Git sağlayıcısı ve başka sürüm kontrol sistemleriGitHub'daki depolar
Derleme makineleriSizin kurduğunuz agent'lar: makineler, container'lar ya da Kubernetes pod'larıHer iş için yeni bir barındırılan VM ya da kendi runner'larınız
EklentilerGeniş bir eklenti kütüphanesiGitHub Marketplace'teki yeniden kullanılabilir action'lar
BakımGüncellemeler, güvenlik ve yedekler sizin işinizBarındırılan runner'larda GitHub üstlenir
MaliyetÜcretsiz yazılım; sunuculara ve bakıma ödeme yaparsınızHerkese açık depolarda ücretsiz; özel depolarda bir kotadan sonra kullanım kadar ödenir
En uygun olduğu yerKarmaşık, şirket içi ya da yoğun biçimde özelleştirilmiş pipeline'larKurulum yapmadan CI/CD isteyen GitHub projeleri

Fark, açıklamalı

Jenkins, Hudson'dan doğan ve bu adı 2011'de alan, kendi sunucularınızda barındırılan açık kaynaklı bir otomasyon sunucusudur. Onu kendi makinelerinize kurar, herhangi bir kaynak kod deposuna bağlar ve pipeline'ları Groovy tabanlı bir sözdizimiyle yazılmış bir Jenkinsfile içinde tanımlarsınız. 2019'dan beri genel kullanımda olan GitHub Actions ise GitHub'a yerleşik otomasyon platformudur: iş akışları, .github/workflows altında duran ve depodaki olaylarla çalışan YAML dosyalarıdır.

Asıl fark, altyapıyı kimin işlettiğidir. Jenkins'te controller'ı ve agent'ları ekibiniz barındırır; derlemelerin nerede ve nasıl çalışacağı üzerinde tam denetim karşılığında güncellemelerden, güvenlikten, yedeklerden ve eklenti uyumluluğundan siz sorumlusunuz. GitHub Actions'ta ise GitHub her iş (job) için yeni bir Linux, Windows ya da macOS runner'ı sağlar ve bakımını yapacağınız hiçbir şey yoktur; yine de özel donanım ya da kapalı ağlar için kendi barındırdığınız (self-hosted) runner'lar ekleyebilirsiniz.

İkisi de geniş bir ekosistemle genişler: Jenkins eklentileriyle, GitHub Actions ise Marketplace'teki yeniden kullanılabilir action'larla. Jenkins her Git sağlayıcısıyla ve başka sürüm kontrol sistemleriyle çalışır; GitHub Actions ise GitHub'daki depolara bağlıdır ama onun pull request'leri, check'leri, issue'ları, sürümleri ve paketleriyle derinlemesine bütünleşir.

Sık yapılan bir yanlış, Jenkins'in modasının geçtiğini düşünmektir. Pek çok büyük kuruluş onu karmaşık, şirket içinde çalışan ya da yoğun biçimde özelleştirilmiş pipeline'lar için hâlâ işletir; GitHub'da barındırılan yeni projelerin çoğu ise kurulum gerektirmediği için Actions ile başlar. İkisi de risksiz değildir: güncellenmemiş Jenkins eklentileri ve bir sürüme sabitlenmemiş üçüncü taraf action'lar yaygın güvenlik zayıflıklarıdır.

Hangisini kullanmalısınız?

Jenkins şu durumlarda doğru seçim:

  • Derlemeler şirket içinde ya da tamamen sizin denetiminizdeki bir ağda çalışmalı.
  • Kodunuz GitHub dışında ya da birkaç farklı sistemde duruyor.
  • Eklentilerin ve betiklerin sağladığı derin özelleştirmeye ihtiyacınız var.
  • Zaten olgun Jenkins pipeline'larınız ve onları işletecek insanlarınız var.

GitHub Actions şu durumlarda doğru seçim:

  • Kodunuz GitHub'da ve sunucu işletmeden CI/CD istiyorsunuz.
  • Pull request'lere, check'lere ve sürümlere bağlı pipeline'lar istiyorsunuz.
  • Makinelerin bakımını yapmadan Linux, Windows ve macOS üzerinde derleme yapmanız gerekiyor.

Aynı derleme, bir Jenkinsfile'da ve bir GitHub Actions iş akışında

Jenkinstext
// Jenkinsfile: Groovy-based, runs on agents of your own Jenkins server
pipeline {
  agent { label 'linux' }
  stages {
    stage('Install') { steps { sh 'npm ci' } }
    stage('Test')    { steps { sh 'npm test' } }
  }
}
GitHub Actionstext
# .github/workflows/ci.yml: YAML, runs on GitHub-hosted runners
name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm test

Sık sorulan sorular

GitHub Actions, Jenkins'in yerini mi alıyor?

GitHub'daki pek çok yeni proje için evet, çünkü sunucu gerektirmez. Jenkins ise pipeline'ların büyük, kendi sunucularda barındırılan ya da derinlemesine özelleştirilmiş olduğu yerlerde yaygınlığını korur ve onları taşımak ciddi emek ister.

Jenkins, GitHub ile çalışabilir mi?

Evet. Jenkins, webhook'lar bir push bildirdiğinde GitHub depolarını derleyebilir ve GitHub eklentileri sayesinde sonuçları pull request'lere durum kontrolü (status check) olarak bildirebilir.

GitHub Actions kendi sunucularımda çalışabilir mi?

Evet. Kendi barındırdığınız runner'lar, örneğin kapalı ağlara ulaşmak ya da özel donanım kullanmak için işlerin kendi makinelerinizde çalışmasını sağlar; iş akışlarını yine GitHub koordine eder.

Daha fazla

Ayarlar