Yazılım geliştirme dünyasıyla ilgileniyorsanız, CI/CD ile mutlaka karşılaşmışsınızdır. CI ve CD, modern geliştirme uygulamalarında ve DevOps’ta sıklıkla karşılaşacağınız terimlerdir.
Peki DevOps nedir? DevOps dönüşüm süreci için neler yapabileceğinizi keşfetmek için ‘İleri Seviye DevOps’ yazımıza mutlaka göz atmalısınız!
CI, yazılım geliştiriciler tarafından geliştirme sürecinin bir parçası olarak oldukça iyi anlaşılırken, CD daha gizemlidir.
Bunun nedeni, “operasyonlar” alanına geçmesi olabilir. CD’nin sürekli dağıtıma atıfta bulunabileceği gerçeği biraz kafa karışıklığı yaratır.
CI/CD, en iyi teknoloji şirketlerinin ürünlerini bile günde birçok kez geliştirmelerini sağlar.
Bu blog yazımızda Software Development LifeCycle sürecini hızlandırmak isteyenlerin dilinden düşürmediği yapılar ile ilgili bilgiler vereceğiz
Continuous integration nedir?
Sürekli entegrasyon, kod üzerinde yapılan değişiklik sonrasında sistemin çalışır durumda olduğunu, yapılan değişikliğin sorunlara yol açmadığını tespit etmek için kullanılan yöntemdir. Sorunları ve kırılmaları tespit edebilmek için birim testleri kullanılır. Yapılan değişiklikler yeni bir yapının parçası olduğundan dolayı testlerde oluşan hatalar, yapılan değişikliğin sistemi kırdığı anlamına gelmektedir. Bu durumda tüm programcılar bilgilendirilerek hatanın bir an önce giderilmesi sağlanır. Sürekli entegrasyon ile programcılar tarafından kod üzerinde yapılan çalışmalar neticesinde her zaman çalışır bir sürümün oluşması sağlanmış olur.
Sürekli entegrasyon (CI), geliştiricilerin kod değişikliklerini daha sık geliştirmesine yardımcı olur. Geliştiricilerin bir uygulamadaki değişiklikleri birleştirildiğinde, bu değişiklikler, değişikliklerin uygulamayı bozmadığından emin olmak için uygulamayı otomatik olarak oluşturarak ve farklı düzeylerde testler ile doğrulanmalıdır.
Continuous delivery nedir?
Sürekli teslimat, sürekli entegrasyonun doğal bir uzantısıdır.
Sürekli teslimat, başarılı olan bir yapıyı (build) bir ortama atma durumunun otomatik olan yoludur. Teslimat ile dağıtım arasında küçük bir fark vardır. Teslimat manuel yolla, dağıtım ise otomatik yapılır. Sürekli teslimat düzgün bir şekilde uygulanırsa, müşteriler standartlaştırılmış bir test sürecinden geçmiş yapıya sahip olacaklardır.
Örnek verecek olursak; Netflix, tamamen otomatik bir sürekli dağıtım sistemine sahiptir. Dağıtımlar otomatik olduğundan ve herhangi bir zamanda gerçekleşebileceğinden, uygulamanız, yeni bir sürüm dağıtıldığında geçici kesintilerden etkilenmeyecek şekilde tasarlanmalıdır.
CI/CD Nedir?
CI/CD, istediğiniz zaman sürdürülebilir bir şekilde yayınlayabileceğiniz yazılım geliştirme yoludur.
Sürekli Entegrasyon (CI) ve Sürekli Teslimat (CD) uygulamalarının birleşik uygulamalarını ifade eder.
Sürekli Entegrasyon, CI/CD için bir ön koşuldur ve şunları gerektirir:
- Geliştiriciler, değişikliklerini günde birçok kez ana kod dalında birleştirir.
- Her kod, otomatik bir kod oluşturma ve test sırasını tetiklemek için birleştirilir. Geliştiriciler ideal olarak sonuçları 10 dakikadan daha kısa sürede alır, böylece çalışmalarına odaklanmaya devam edebilirler.
Sürekli Teslimat uygulamasında ise çoğu durum manuel olarak gerçekleşse de kod değişiklikleri sürekli olarak devreye alınır.
CI/CD İlkeleri
Başarılı üretim dağıtımları için CI/CD ilkeleri CI’yi daha da ileri götürür:
Sisteminizi tekrar eden sürümleri destekleyecek şekilde tasarlayın: Sorunları gerçek zamanlı olarak tespit etmeye yardımcı olan ölçümleri uygulayın.
Kodu her zaman test odaklı geliştirmeye çalışın.
Küçük yinelemelerle çalışın.
Eğer inşa ederseniz, çalıştırırsınız: Otonom mühendis ekibi, yazılımın kalitesinden ve istikrarlı ilerlemesinden sorumlu olmalıdır.
CI/CD’yi gerçeğe dönüştürmek için her şeyi otomatikleştirmeniz gerekir.
Agile, CI/CD ve DevOps arasındaki fark nedir?
Agile, CI/CD ve DevOps farklı konular olsalar da birbirlerini desteklerler. Örneğin; Agile, geliştirme sürecine, CI/CD uygulamalara ve DevOps’a kültüre odaklanır.
Agile: Çeviklik olarak anılan Agile, süreç engellerini ortadan kaldırmaya ve daha yakın işbirliğine odaklanıyor. Agile, değişimin sürekliliğini vurgular ve yazılım üreticileri olarak yüksek kaliteli yazılımı başarılı bir şekilde tasarlamak, geliştirmek ve sunmak için ihtiyaç duyduğumuz şeyleri genellikle eksik olarak bildiğinizi düşünür.
Başarının sırrı artık çok çalışmak değil. Bizi amaçlarımıza ulaştıracak en doğru yolu seçerek planlı ve sistematik şekilde çalışmaktır.
Başarılı proje yönetiminin püf noktalarını öğrenmek için ‘Başarılı Proje Yönetimi: Agile ve Scrum’ yazımıza göz atabilirsiniz.
Sürekli entegrasyon/Sürekli teslimat: CI/Sürekli entegrasyon, bir ekibin üyelerinin çalışmalarını entegre ettikleri bir yazılım mühendisliği uygulamasıdır.
Bununla birlikte, CD/Sürekli teslimat, CI’nın inşa edeceği ve test edeceği şeyi paketlemek ve dağıtır.
Yüksek işlevli CI/CD uygulamaları Agile ile geliştirmeyi doğrudan kolaylaştırır.
DevOps kültürü: DevOps’un amacı, bir organizasyondaki aşırı uzmanlaşma ve fırlatma rollerinin üretim sorunlarına hızlı ve hatta etkili yanıt vermeyi önleme üzerindeki olumsuz etkisinden kaçınmaktır. Buna ek olarak, DevOps kuruluşları, her bir ekibi diğerinin becerileri konusunda çapraz eğiterek Operasyonlar ve Mühendislik arasındaki engelleri ortadan kaldırır.
CI/CD’nin faydaları nelerdir?
Verimliliği arttırır
- Otomatik dağıtım ve testler gerçekleştirerek verimliliği artırır.
- Mühendislik ve operasyon yolu-of aerodinamik ağ üzerinden çalışma imkanı sağlar.
- Yeni hizmetler ve artan trafik yönetme daha verimli gerçekleşir.
Azalan riskler
- En son yazılım sürümünü destekleyerek risklere karşı önlem alır.
- Yapılandırma hata riskini kaldırır.
- Büyük yükseltme projelerin yerine kademeli güncellemeler sağlar.
Servis çevikliği
-
Daha kısa teslim süreleri (TTM) sağlar.
-
Aktivasyona hazır yetenekler oluşturur.
-
Yeni hizmetlerin çeşitliliğini ele almaya hazır haldedir.
En İyi CI / CD Araçları
Piyasada bulunan çok sayıda CI/CD aracı arasından bütçe ve proje gereksinimlerine uyan en iyi CI/CD araçlarını seçmek çok önemli hale geldi. İşinizi kolaylaştırmak için, en iyi CI / CD aracını seçmenize yardımcı olacağını düşündüğümüz liste oluşturduk.
Jenkins
Jenkins, açık kaynaklı bir CI/CD aracıdır. Sürekli teslimatı kolaylaştırmanın yanı sıra sürekli entegrasyon imkanı sunar. Bunun yanısıra, gerçek zamanlı test ve raporlama imkanı da sağlar.
Açık kaynak kodlu olması ve uzun süredir var olması nedeniyle yaygın olarak kullanılan ve en iyi CI / CD araçlarından biridir.
Jenkins’in önemli özellikleri:
- Windows, Linux ve macOS platformlarında kullanılabilir.
- Ücretsiz olması, girişimler ve büyük ölçekli kuruluşların tercih sebebi.
- Oldukça genişletilebilir yapıya sahiptir.
- AWS, Google Cloud, Azure, Digital Ocean ve daha fazlası gibi bulut platformlarıyla entegre çalışır.
- Karmaşık CD gereksinimlerini gerçekleştirmek için kullanılır.
- .war biçimindedir.
TeamCity
TeamCity, Java’da sunucu tabanlı kullanılan CI/CD boru hattı aracıdır. JetBrains tarafından geliştirilmiştir. Windows ve Linux sunucularına kurulum sağlar.
TeamCity, küçük ekiplere Azure DevOps ve Jira Software Cloud ile entegre etmek için kolay bir seçenek sunar. Ayrıca, Kubernetes kümesinde derleme aracılarının başlatılmasını da destekler.
TeamCity’nin önemli özellikleri:
- Genişletilebilir ve özelleştirilebilir.
- Paralel derlemeleri çalıştırabilir.
- Ardışık düzen özelliği, Kotlin tabanlı DSL (alana özel dil) kullanılarak tanımlanır.
- Docker, Visual Studio Team Services, Maven, NuGet ve daha fazlasıyla entegre olur.
- Google Cloud, AWS, VMWare vSphere gibi popüler bulut platformlarıyla entegre olur.
- Çalıştırma geçmişini, test ilerleme raporlarını anında görüntülemeyi sağlayan güçlü özellikler sağlar.
GitLab
GitLab CI, GitLab’de yerleşik olan bir araçtır.
Bununla birlikte, GitLab CI/CD’yi kullanmak için, kod tabanını bir Git deposunda barındırmanız ve kök dizininde bulunması gereken komut dosyalarını belirtmeniz gerekir.
GitLab’ın önemli özellikleri:
- GitLab CI, geliştirici API’leri sunar.
- Windows, Linux ve macOS gibi platformlar için mevcuttur.
- Kullanıcı dostu bir arayüze sahiptir.
- GitLab CI’daki önbelleğe alma mekanizması oldukça etkilidir.
- GitLab CI’daki işler paralel olarak sıralı olarak çalışabilir.
- Jenkins veya CircleCI gibi bir araçtan GitLab CI’ye geçmek oldukça kolaydır.
- GitLab CI’nın kullanımı oldukça kolaydır.
Yazılım geliştirme dünyasının içindeyseniz GitHub hesabınızın olması mutlaka gerekli olacaktır. GitHub kullanımını öğrenmeye başmadan önce, GitHub’ın kalbi olan Git’i anlamanız gerekli.
Sıfırdan temel GitHub komutlarını öğrenmek için, ‘GitHub Nedir? Her Yazılımcının Bilmesi Gereken Git Komutları’ yazımıza mutlaka göz atmalısınız!
CircleCI
CircleCI, açık kaynaklı projeler ve büyük ölçekli projeler için en iyi CI/CD araçlarından biridir.
Windows, Linux ve macOS platformlarındaki dilleri destekler.
CircleCI’ın önemli özellikleri:
- Kurulumu kolaydır. GitHub gibi popüler sürüm kontrol sistemlerinde kullanılabilir.
- Popüler programlama dillerinin çoğunu destekler.
- CircleCI paralel testleri oldukça faydalıdır.
- CircleCI’nin şirket içi teklifi olan CircleCI Server, GitHub Enterprise, LambdaTest, Tulumlar üçüncü taraf araçlarla entegre edilebilir.
- Süreçleri otomatikleştirmeye ve üçüncü taraf araçlarla entegrasyonu hızlandırmaya yardımcı olur.
Kriterlerine uygun pozisyonlarla eşleşmeye hazır misin? Hemen ücretsiz profilini oluştur.