Jenkins Savaşı ve GitLab CI/CD

Geçtiğimiz on yılda sürekli entegrasyon (CI) ve sürekli dağıtım (CD) araçlarının geliştirilmesinde önemli ilerlemeler kaydedildi. Yazılım geliştirme ve işletimi entegre etmeye yönelik teknolojilerin geliştirilmesi (Geliştirme Operasyonları, DevOps), CI/CD araçlarına olan talebin hızlı bir şekilde artmasına yol açmıştır. Mevcut çözümler sürekli geliştirilmekte, zamana ayak uydurmaya çalışılmakta, yeni sürümler yayınlanmakta ve yazılım kalite güvencesi (QA) dünyasında sürekli olarak birçok yeni ürün ortaya çıkmaktadır. Bu kadar çok seçenek varken doğru araçları seçmek kolay bir iş değildir.

Jenkins Savaşı ve GitLab CI/CD

Mevcut tüm CI/CD araçları arasında bu alanda bir şeyler arayanlar için kesinlikle dikkate almaya değer iki proje var. Jenkins ve GitLab platformunun bir parçası olan GitLab CI/CD aracından bahsediyoruz. Jenkins'in bundan daha fazlası var 16000 GitHub'daki yıldızlar. gitlab.com'daki GitLab deposu biraz daha kazandı 2000 yıldızlar Depoların popülerliğini karşılaştırırsak Jenkins'in GitLab CI/CD'yi içeren platformdan 8 kat daha fazla yıldız aldığı ortaya çıkıyor. Ancak bir CI/CD aracı seçerken bu, dikkat etmeye değer tek gösterge olmaktan çok uzaktır. Pek çok karşılaştırmada Jenkins ve GitLab CI/CD'nin neden birbirine bu kadar yakın olduğunu açıklayan pek çok başka örnek var.

Örneğin, çok çeşitli ürünlere ilişkin incelemeleri ve kullanıcıların onlara verdiği derecelendirmeleri toplayan G2 platformundan gelen verileri ele alalım. İşte ortalama puan Jenkins288 incelemeden elde edilen 4,3 yıldızdır. Ah GitLab Burada 270 yorum var ve bu araca verilen ortalama puan 4,4 yıldız. Jenkins ve GitLab CI/CD'nin birbirleriyle eşit şartlarda rekabet ettiğini söylersek yanılmış olmayız. Jenkins projesinin 2011 yılında ortaya çıktığını ve o zamandan bu yana test uzmanlarının favori aracı haline geldiğini belirtmek ilginçtir. Ancak aynı zamanda 2014 yılında başlatılan GitLab CI/CD projesi de bu platformun sunduğu gelişmiş yetenekler sayesinde oldukça üst sıralarda yer aldı.

Jenkins'in benzer platformlarla karşılaştırıldığında popülerliğinden bahsedecek olursak, Travis CI ve Jenkins platformlarını karşılaştıran bir makale yayınladıktan sonra bir anket düzenlediğimizi belirtelim. 85 kullanıcı katıldı. Katılımcılardan en sevdikleri CI/CD aracını seçmeleri istendi. %79'u Jenkins'i, %5'i Travis CI'yı ve %16'sı diğer araçları tercih ettiğini belirtti.

Jenkins Savaşı ve GitLab CI/CD
Anket Sonuçları

Diğer CI/CD araçları arasında en çok GitLab CI/CD'den bahsedildi.

DevOps konusunda ciddiyseniz projenin özelliklerini, bütçesini ve diğer gerekliliklerini dikkate alarak uygun araçları dikkatlice seçmeniz gerekir. Doğru seçimi yapmanıza yardımcı olmak için Jenkins ve GitLab CI/CD'yi analiz edeceğiz. Bu, umarım doğru seçimi yapmanıza yardımcı olur.

Jenkins'le tanışın

Jenkins Savaşı ve GitLab CI/CD
Jenkins yazılım projeleriyle ilişkili birçok görevi otomatikleştirmek için tasarlanmış, iyi bilinen, esnek bir CI/CD aracıdır. Jenkins tamamen Java ile yazılmıştır ve MIT lisansı altında yayınlanmıştır. Yazılım oluşturma, test etme, dağıtma, entegre etme ve yayınlamayla ilgili görevleri otomatikleştirmeyi amaçlayan güçlü yeteneklere sahiptir. Bu araç çeşitli işletim sistemlerinde kullanılabilir. Bunların arasında macOS, Windows ve OpenSUSE, Ubuntu ve Red Hat gibi birçok Linux dağıtımı bulunmaktadır. Çeşitli işletim sistemleri için tasarlanmış Jenkins kurulum paketleri bulunmaktadır, bu araç Docker'a ve JRE'ye (Java Runtime Environment) sahip herhangi bir sisteme kurulabilir.

Jenkins geliştiricileri, Kubernetes ortamında çalışmak üzere tasarlanan Jenkins X adında başka bir proje yarattı. Jenkins X, Helm, Jenkins CI/CD Sunucusu, Kubernetes ve DevOps'un en iyi uygulamalarını takip eden CI/CD işlem hatları oluşturmak için tasarlanmış diğer araçları entegre eder. Mesela GitOps burada kullanılıyor.

Jenkins'in avantajlarından biri de senaryolarının çok iyi yapılandırılmış, anlaşılır ve okunması kolay olmasıdır. Jenkins ekibi, Jenkins'in çeşitli teknolojilerle etkileşimini düzenlemeyi amaçlayan yaklaşık 1000 eklenti oluşturdu. Komut dosyalarında, örneğin çeşitli kapalı sistemlere bağlanmanıza olanak tanıyan kimlik doğrulama sistemlerini kullanabilirsiniz.

Jenkins boru hattının işletimi sırasında, işin belirli aşamalarının başarıyla tamamlanıp tamamlanmadığını, her adımda ne olduğunu gözlemleyebilirsiniz. Ancak tüm bunları bir tür grafik arayüz kullanarak değil, terminalin yeteneklerini kullanarak gözlemleyebilirsiniz.

Jenkins'in özellikleri

Jenkins'in iyi bilinen özellikleri arasında konfigürasyon kolaylığı, çeşitli operasyonların yüksek düzeyde otomasyonu ve mükemmel dokümantasyon yer almaktadır. DevOps sorunlarını çözmekten bahsedersek, Jenkins çok güvenilir bir araç olarak kabul edilir ve bunu kullanarak kural olarak tüm proje işleme sürecini yakından izlemenin bir anlamı yoktur. Diğer CI/CD araçlarında durum böyle değildir. Jenkins'in en önemli özelliklerinden bazılarından bahsedelim.

▍1. Ücretsiz, açık kaynak, çoklu platform destekli

Jenkins macOS, Windows ve Linux platformlarında çalışabilir. Ayrıca otomatik görevleri tekdüze ve hızlı bir şekilde düzenlemenize olanak tanıyan Docker ortamında da çalışabilir. Araç ayrıca Apache Tomcat ve GlassFish gibi Java özellikli kapsayıcılarda servlet olarak da çalışabilir. Jenkins'i verimli bir şekilde kurun belgelenmiş.

▍2. Geliştirilmiş eklenti ekosistemi

Jenkins eklenti ekosistemi, diğer CI/CD araçlarının eklenti ekosistemleriyle karşılaştırıldığında çok daha olgun görünüyor. Şu anda Jenkins için 1500'ün üzerinde eklenti mevcut. Bu eklentiler çok çeşitli sorunları çözmeyi amaçlamaktadır; onların yardımıyla çok çeşitli projeleri otomatikleştirebilirsiniz. Aralarından seçim yapabileceğiniz ücretsiz eklentilerin zenginliği, Jenkins kullanan herkesin pahalı ücretli eklentiler satın alma ihtiyacının olmadığı anlamına gelir. Bir olasılık var bütünleşme Birçok DevOps aracına sahip Jenkins.

▍3. Kolay kurulum ve kurulum

Jenkins'in kurulumu ve yapılandırılması oldukça kolaydır. Aynı zamanda sistem güncelleme işlemi de oldukça uygundur. Burada, Jenkins'in kurulumu ve yapılandırılmasıyla ilgili çeşitli sorulara cevap verebileceğinden, dokümantasyonun kalitesinden bir kez daha bahsetmeye değer.

▍4. Dost canlısı topluluk

Daha önce de belirtildiği gibi Jenkins, ekosistemi çok sayıda eklenti içeren açık kaynaklı bir projedir. Jenkins'in çevresinde projenin geliştirilmesine yardımcı olan geniş bir kullanıcı ve geliştirici topluluğu var. Topluluk, Jenkins'in gelişimini yönlendiren faktörlerden biridir.

▍5. REST API'nin kullanılabilirliği

Jenkins ile çalışırken sistemin yeteneklerini genişleten REST API'yi kullanabilirsiniz. Sisteme uzaktan erişim için API üç versiyonda sunulmaktadır: XML, JSONP destekli JSON, Python. Burada Jenkins REST API ile çalışmaya ilişkin ayrıntıları kapsayan dokümantasyon sayfası.

▍6. Paralel görev desteği

Jenkins, DevOps görevlerinin paralelleştirilmesini destekler. İlgili araçlarla kolayca entegre edilebilir ve görev sonuçlarıyla ilgili bildirimler alınabilir. Farklı sanal makineler kullanılarak paralel proje yapıları düzenlenerek kod testi hızlandırılabilir.

▍7. Dağıtılmış ortamlarda çalışma desteği

Jenkins, birden fazla bilgisayar kullanarak dağıtılmış yapıları düzenlemenize olanak tanır. Bu özellik büyük projelere uygulanabilir ve bir ana Jenkins sunucusunun ve birkaç yardımcı makinenin bulunduğu bir çalışma şeması kullanır. Bir projenin farklı ortamlarda test edilmesinin gerekli olduğu durumlarda yardımcı makineler de kullanılabilir. Bu özellikler Jenkins'i diğer benzer projelerden ayırıyor.

GitLab'a Giriş

Jenkins Savaşı ve GitLab CI/CD
GitLab CI / CD DevOps mühendisleri tarafından en yeni ve en sevilen araçlardan biri olarak adlandırılabilir. Bu ücretsiz, açık kaynaklı araç, GitLab sürüm kontrol sistemine yerleşiktir. GitLab platformunun bir topluluk sürümü vardır; depo yönetimini, sorunları izlemeye yönelik araçları, kod incelemelerini düzenlemeyi ve belge oluşturmaya odaklanan mekanizmaları destekler. Şirketler GitLab'ı şirket içinde kurarak, güvenli kullanıcı yetkilendirmesi ve kimlik doğrulaması için onu Active Directory ve LDAP sunucularına bağlayabilir.

Burada GitLab CI/CD özelliklerini kullanarak CI/CD işlem hatlarını nasıl oluşturacağınızı öğrenmenize yardımcı olacak bir video eğitimi.

GitLab CI/CD başlangıçta bağımsız bir proje olarak piyasaya sürüldü, ancak 2015 yılında araç seti GitLab 8.0'a entegre edildi. Tek bir GitLab CI/CD sunucusu 25000'den fazla kullanıcıyı destekleyebilir. Bu tür sunuculara dayanarak yüksek kullanılabilirliğe sahip sistemler oluşturabilirsiniz.

GitLab CI/CD ve ana GitLab projesi Ruby ve Go'da yazılmıştır. MIT lisansı altında yayınlanıyorlar. GitLab CI/CD, CI/CD araçlarının olağan özelliklerine ek olarak, örneğin iş planlamasıyla ilgili ek yetenekleri de destekler.

GitLab CI/CD'yi projenize entegre etmek çok kolaydır. GitLab CI/CD'yi kullanırken proje kodunu işleme süreci, her biri belirli bir sırayla gerçekleştirilen çeşitli görevlerden oluşabilen aşamalara bölünmüştür. Görevlere ince ayar yapılabilir.

Görevler paralel olarak yürütülebilir. Aşamaların ve görevlerin sırası ayarlandıktan sonra CI/CD hattı kullanıma hazırdır. Görevlerin durumunu takip ederek ilerlemesini izleyebilirsiniz. Sonuç olarak GitLab CI/CD'yi kullanmak çok kullanışlıdır, belki de diğer benzer araçlardan daha kullanışlıdır.

GitLab CI/CD ve GitLab'ın özellikleri

GitLab CI/CD, en popüler DevOps araçlarından biridir. Proje, yüksek kaliteli belgelerle öne çıkıyor, yeteneklerinin kullanımı kolay ve rahat. GitLab CI/CD'de yeniyseniz, aracın özelliklerinin aşağıdaki listesi size ondan neler bekleyebileceğiniz konusunda genel bir fikir verecektir. Bu özelliklerin çoğunun, GitLab CI/CD'nin entegre edildiği GitLab platformunun kendisiyle ilgili olduğu unutulmamalıdır.

▍1. Popülerlik

GitLab CI/CD, yaygın kullanım alanı bulan nispeten yeni bir araçtır. GitLab CI/CD, giderek otomatik yazılım testi ve dağıtımı için kullanılan son derece popüler bir CI/CD aracı haline geldi. Kurulumu kolaydır. Aynı zamanda GitLab platformunda yerleşik ücretsiz bir CI/CD aracıdır.

▍2. GitLab Sayfaları ve Jekyll desteği

Jekyll, GitLab depolarını temel alan siteler oluşturmak için GitLab Pages sistemi içinde kullanılabilecek statik bir site oluşturucudur. Sistem kaynak malzemeleri alır ve bunlara dayalı olarak hazır bir statik web sitesi oluşturur. Dosyayı düzenleyerek bu tür sitelerin görünümünü ve yeteneklerini kontrol edebilirsiniz. _config.yml, Jekyll tarafından kullanıldı.

▍3. Proje planlama yetenekleri

Proje aşamalarının planlanabilmesi sayesinde problemlerin ve gruplarının takibinin kolaylığı artar. Bu, projelerdeki iş organizasyonunu yönetmenize ve bunların belirli bir tarih için uygulanmasını planlamanıza olanak tanır.

▍4. CI çalıştırıcılarının otomatik ölçeklendirilmesi

Belirli görevleri yerine getirmekten sorumlu koşucuların otomatik olarak ölçeklendirilmesi sayesinde, sunucu kapasitesi kiralama maliyetinden ciddi oranda tasarruf edebilirsiniz. Bu, özellikle projelerin paralel olarak test edildiği ortamlar söz konusu olduğunda çok önemlidir. Ayrıca bu, birden fazla depodan oluşan büyük projeler için önemlidir.

▍5. Sorun izleme araçları

GitLab'ın güçlü sorun izleme yetenekleri, birçok açık kaynaklı projenin platformu kullanmasına yol açtı. GitLab CI/CD, farklı kod dallarını paralel olarak test etmenize olanak tanır. Test sonuçları sistem arayüzünde rahatlıkla analiz edilebilir. Bu GitLab CI/CD'yi Jenkins'ten ayırır.

▍6. Depolara erişimi kısıtlama

GitLab platformu, depolara erişimin kısıtlanmasını destekler. Örneğin, bir veri havuzundaki bir proje üzerinde işbirliği yapan kişilere, rollerine karşılık gelen haklar atanabilir. Bu özellikle kurumsal projeler için geçerlidir.

▍7. Aktif topluluk desteği

GitLab çevresinde, bu platformun ve araçlarının, özellikle de GitLab CI/CD'nin geliştirilmesine katkıda bulunan aktif bir topluluk oluştu. GitLab CI/CD ile GitLab arasındaki derin entegrasyon, diğer şeylerin yanı sıra, GitLab CI/CD ile çalışırken ortaya çıkan soruların yanıtlarını bulmayı kolaylaştırır.

▍8. Çeşitli sürüm kontrol sistemleriyle çalışma desteği

GitLab CI/CD, yalnızca GitLab depolarında barındırılan kodlarla çalışamayan bir sistemdir. Örneğin, kod bir GitHub deposunda saklanabilir ve CI/CD işlem hattı GitLab CI/CD kullanılarak GitLab'a dayalı olarak düzenlenebilir.

Jenkins ve GitLab CI/CD'nin karşılaştırması

Jenkins ve GitLab CI/CD çok iyi araçlardır ve her biri CI/CD hattının normal işleyişini sağlama kapasitesine sahiptir. Ancak onları karşılaştırdığınızda, birçok yönden benzer olmalarına rağmen bazı yönlerden birbirlerinden farklı oldukları ortaya çıkıyor.

Tanımlama
Jenkins
GitLab CI / CD

Açık veya kapalı kaynak
açık kaynak
açık kaynak

Montaj
Gerekli.
Bu, GitLab platformunun yerleşik bir özelliği olduğundan gerekli değildir.

Benzersiz özellikler
Eklenti desteği.
Sürüm kontrol sistemine derin entegrasyon.

Destek
Mevcut değil.
Var.

Kurulum ve konfigürasyon
Herhangi bir zorluk yaratmaz
Herhangi bir zorluk yaratmaz

Sistemin kendi kendine konuşlandırılması
Sistemi kullanmanın tek seçeneği budur.
Desteklendi.

CI/CD işlem hatları oluşturma
Jenkins Pipeline tarafından desteklenmekte ve kullanılmaktadır.
Desteklendi.

Uygulama performansı izleme
Mevcut değil.
Var.

ekosistem
1000'den fazla eklenti var.
Sistem GitLab içerisinde geliştirilmektedir.

API
Gelişmiş bir API sistemini destekler.
Projelere daha derin entegrasyon için bir API sunar.

JavaScript desteği
Var.
Var.

Diğer araçlarla entegrasyon
Diğer araç ve platformlarla (Slack, GitHub) entegrasyon desteklenmektedir.
Başta GitHub ve Kubernetes olmak üzere üçüncü taraf sistemlerle entegrasyon için birçok araç.

Kod kalite kontrolü
Desteklenir - SonarQube eklentisinin ve diğer eklentilerin kullanılması.
Desteklendi.

Jenkins ve GitLab CI/CD arasındaki farklar

Jenkins ve GitLab CI/CD'yi tanımlayıp karşılaştırdıktan sonra bu DevOps araçları arasındaki farklara odaklanalım. Bu farklılıkları bilmek, bu araçlardan birini diğerine tercih edenler hakkında fikir verecektir.

  • GitLab CI/CD, Git depolarını tam olarak kontrol edebilir. Depo şubelerini yönetmekten ve diğer bazı özelliklerden bahsediyoruz. Ancak Jenkins, depolarla çalışabilmesine rağmen bunlar üzerinde GitLab CI/CD ile aynı düzeyde kontrol sağlamaz.
  • Jenkins ücretsiz, açık kaynaklı bir projedir. Onu seçen kendisi açar. GitLab CI/CD ise GitLab platformunun içinde yer alıyor, hazır bir çözüm.
  • GitLab CI/CD, proje düzeyinde çalışan gelişmiş sorun yönetimi araçlarını destekler. Jenkins'in bu tarafı daha az gelişmiş.

Jenkins ve GitLab CI/CD: güçlü ve zayıf yönler

Artık Jenkins ve GitLab CI/CD hakkında biraz fikriniz var. Şimdi bu araçları daha iyi tanımanızı sağlamak için güçlü ve zayıf yönlerine bakalım. Hangi araca ihtiyacınız olduğuna zaten karar verdiğinize inanıyoruz. Umarım bu bölüm kendinizi test etmenize olanak sağlar.

▍Jenkins'in güçlü yönleri

  • Çok sayıda eklenti.
  • Alet kurulumu üzerinde tam kontrol.
  • Koşucularda kolay hata ayıklama.
  • Kolay düğüm kurulumu.
  • Kolay kod dağıtımı.
  • Çok iyi bir kimlik yönetimi sistemi.
  • Esneklik ve çok yönlülük.
  • Çeşitli programlama dilleri desteği.
  • Sistem sezgisel düzeyde anlaşılabilir.

▍Jenkins'in Zayıf Yönleri

  • Eklentileri kullanırken zorluklar ortaya çıkabilir.
  • Jenkins'i küçük projelerde kullanırken, kurulumu kendiniz yapmak için gereken süre makul olmayacak kadar fazla olabilir.
  • CI/CD zincirleri hakkında genel analitik bilgi eksikliği.

▍GitLab CI/CD'nin güçlü yönleri

  • Docker ile iyi entegrasyon.
  • Koşucuların kolay ölçeklendirilmesi.
  • CI/CD hattının aşamalarında yer alan görevlerin paralel olarak yürütülmesi.
  • Görev ilişkilerini ayarlarken yönlendirilmiş döngüsel olmayan grafik modelini kullanma.
  • Koşucuların paralel yürütülmesi olasılığı nedeniyle yüksek düzeyde ölçeklenebilirlik.
  • Görev ekleme kolaylığı.
  • Basit çatışma çözümü.
  • Güvenilir güvenlik sistemi.

▍GitLab CI/CD'nin zayıf yönleri

  • Her görev için yapıları tanımlamanız ve yüklemeniz/kaldırmanız gerekir.
  • Şubeleri birleştirmenin sonuçlarını, onları gerçekten birleştirmeden önce test edemezsiniz.
  • Bir CI/CD hattının aşamalarını açıklarken aşamaları tek tek birbirinden ayırmak henüz mümkün değildir.

sonuçlar

Hem Jenkins'in hem de GitLab CI/CD'nin güçlü ve zayıf yönleri var. Ne seçileceği sorusunun cevabı, belirli bir projenin ihtiyaçlarına ve özelliklerine bağlıdır. Bugün tartışılan CI/CD araçlarının her biri belirli özellikler açısından farklılık gösterir, ancak bu araçlar aynı sorunu çözmek için oluşturulmuştur. Aynı zamanda Jenkins bağımsız bir araçtır ve GitLab CI/CD, kod üzerinde işbirliği için tasarlanmış bir platformun parçasıdır.

Bir CI/CD sistemi seçerken, yeteneklerine ek olarak, onunla ilişkili olabilecek maliyetleri ve projeyi destekleyen DevOps mühendislerinin tam olarak neyle çalışmaya alışık olduklarını da hesaba katmak gerekir.

Hangi CI/CD araçlarını kullanıyorsunuz?

Jenkins Savaşı ve GitLab CI/CD

Jenkins Savaşı ve GitLab CI/CD

Kaynak: habr.com

Yorum ekle