Sürekli Entegrasyon

menu icon

Sürekli Entegrasyon

Bu kılavuzda bir yazılım geliştirme ve DevOps uygulaması olan sürekli entegrasyon hakkında daha fazla bilgi edinin. Sürekli entegrasyonda her geliştirici yeni kodunu ana kod dalına günde en az bir kez entegre eder.

Sürekli entegrasyon nedir?

Sürekli entegrasyon, geliştiricilerin yazdıkları yeni kodu kod tabanına günde en az bir kez ekleyerek geliştirme döngüsü boyunca daha sık entegre ettiği bir yazılım geliştirme sürecidir. Entegrasyon sorunlarını, düzeltmenin daha kolay olduğu daha erken dönemde belirlemek için derlemenin her yinelemesinde otomatikleştirilmiş test gerçekleştirilir. Bu, yayın için gerçekleştirilen son birleştirmede de sorunların önlenmesine yardımcı olur. Genel olarak sürekli entegrasyon, derleme sürecinin kolaylaştırılmasına yardımcı olur; bu da yazılım kalitesinin daha yüksek, teslimat zamanlamalarının daha öngörülebilir olmasını sağlar.

Sürekli entegrasyon, sürekli teslim ve sürekli devreye almanın karşılaştırılması

Sürekli entegrasyonda her geliştirici, çalışmalarını günde en az bir kez (ya da tercihen günde birden çok kez) ana kaynak kod dalına entegre eder. Başka bir DevOps uygulaması olan sürekli teslim bunun yerine kod tabanındaki her türlü doğrulanmış değişikliği, yani güncellemeleri, hata düzeltmelerini, hatta yeni özellikleri kullanıcılara mümkün olduğunca hızlı ve güvenli bir şekilde sunmaya odaklanır. Sürekli devreye alma işlemi, kod tabanı değişikliklerinin geçerliliğini doğrulamak için otomatikleştirilmiş test kullanarak süreci daha da hızlandırır ve güncellemelerin daha çabuk gerçekleşmesini sağlar.

Sürekli entegrasyonun bittiği yerde sürekli teslim başlar ve uygulamaların seçilen altyapı ortamlarına sunulmasını otomatikleştirir. Kod değişikliklerinin geliştirme, test ve üretim gibi farklı ortamlara yönlendirilmesini otomatikleştirir.

Avantajlar

Sürekli entegrasyonun sağladığı en dikkate değer avantajlardan birkaçı şunlardır:

  • Geribildirimin iyileştirilmesi için ilerlemenin sürekli ve kanıtlı hale getirilmesi
  • Hataları erkenden, hatta bazen girişten sonra dakikalar içinde ele almanıza olanak tanıyan erken ve gelişmiş hata algılama ve ölçümler
  • Gelişmiş ekip işbirliği; ekipteki herkes kodu değiştirebilir, sistemi entegre edebilir ve yazılımın diğer bölümleriyle çelişkileri hızlı bir şekilde belirleyebilir
  • Gelişmiş sistem entegrasyonu, yazılım geliştirme yaşam çevriminin sonunda beklenmedik durumları azaltır
  • Birleştirilmesi ve test edilmesi gereken paralel değişikliklerin sayısında azalma
  • Sistem testi sırasında hata sayısının azalması
  • Testlerde temel alınacak sürekli güncellenen sistemler

Sürekli entegrasyon, çevik ve DevOps

Çevik

Çevik geliştirme, yazılım geliştirme ekiplerinin kendilerini organize etme, gereksinimlerdeki ve yayın yazılımındaki değişikliklere uyum sağlama biçimini iyileştiren bir yazılım geliştirme uygulamasıdır. Sürekli entegrasyon (bağlantı IBM dışındadır) ve çevik geliştirmenin (PDF, 153 KB) paylaştığı birbirinin aynısı birçok özellik (örneğin, test otomasyonu) olduğundan, sürekli entegrasyonu ve çevik yaklaşımını aynı anda ele almak yararlı olabilir. Çevik yaklaşım, geliştirmeyi daha küçük iş grupları ya da hamleler (sprint) halinde düzenler. Bu birleşik uygulamalar DevOps'ta uygulandığında yazılım kalitesinin ve proje esnekliğinin sağlanmasına yardımcı olur.

Sürekli entegrasyon, çalışmalarınızı sık sık, çoğunlukla günde birçok kez entegre etmenizi gerektirir. Entegrasyonu, entegrasyon hatalarını mümkün olduğunca erken algılayan otomatik bir derleme ile doğrularsınız. Bu derleme, doğrulamanın bir parçası olarak çalıştırma testlerini içermelidir. Hızlı testlerin otomatikleştirilmiş bir test ortamındaki çalıştırma zamanı testlerine kadar genişletilmesi, doğal olarak sürekli teslimle sonuçlanır.

Çevik geliştirme (bağlantı IBM dışındadır) de yinelemelidir ve çözümleri zaman içinde ölçekleyebilecek ve geliştirebilecek şekilde değişikliğe uyum sağlar. Sürekli entegrasyon bağlamında, çevik yazılım geliştirme, sürekli olarak entegrasyon yaparken yazılım yinelemelerini, özelliklerin değerini önceliklendirme biçiminize göre teslim etmeyi içerir.

DevOps

DevOps çerçevesinde sürekli entegrasyon, yazılım geliştirme sürecinin başında yer alır. Bu süreçte yerel kopyalarınızın ana kod derleme dalından çok uzağa sürüklenmesini engellemek için kodunuzu günde en az bir kez girmeniz gerekir. Bu, derlemeyi "bozabilecek" ve ekip tarafından çözülmesi saatlerce ya da günlerce sürebilecek felaket niteliğindeki birleştirme çelişkilerini önlemenize yardımcı olur.

Sürekli entegrasyon, sürekli teslimin test, devreye alma ve yayın aşamaları için bir ön koşul niteliğindedir. Sürekli entegrasyon hizmeti, kod değişikliklerinizi otomatik olarak derleyip herhangi bir hata olup olmadığını görmek için test ettiğinden, kod girişinden birkaç dakika sonra bütün geliştirme ekibi kötü bir kod oluşturup oluşturmadığınızı bilecektir.

Açık kaynak sürekli entegrasyon araçları

En sık kullanılan sürekli entegrasyon araçlarından bazıları şunlardır:

  • Jenkins: Yaygın olarak kullanılan açık kaynak sürekli entegrasyon aracı olan Jenkins, geliştiricilerin kodu, kaynak havuzuna işledikleri anda otomatik olarak derlemesine, entegre etmesine ve test etmesine olanak sağlayarak geliştiricilerin hataları erkenden yakalamasını ve yazılımı daha hızlı devreye almasını kolaylaştırır. Jenkins'te Docker eklentisi bulunur.
  • Buildbot: Buildbot, yazılım geliştirme çevriminin bütün bölümlerini otomatikleştirebilir. Bir iş zamanlama sistemi olarak işleri sıraya alır, yürütür ve sonuçları raporlar.
  • Go: Go'yu diğer araçlar arasında öne çıkaran özellik, karmaşık derleme iş akışlarının modellenmesini kolaylaştıran işlem hattı kavramıdır.
  • IBM UrbanCode Build
  • Travis CI: En eski ve en güvenilen barındırılan çözümlerden biri olan Travis CI, işletmenizde şirket içi sürüm olarak da kullanılabilir.
  • GitLab CI: Açık kaynak Rails projesinin ayrılmaz bir parçası olan GitLab CI, erişim denetimi, sorun izleme, kod incelemeleri ve başka birçok özelliklerle ayrıntılı Git havuz yönetimi sağlayan, ücretsiz, barındırılan bir hizmettir.

Açık kaynak araçları ile sürekli entegrasyon, aşağıdakiler de dahil olmak üzere birçok avantaj sağlar:

  • Projenizi destekleyebilecek yüzlerce eklenti
  • Python, Java ve JavaScript gibi açık kaynak dillerine ilişkin kapsamlı destek
  • Öğrenciler, startup şirketler ve ek bir işte çalışan geliştiriciler için bütçeyi sarsmayan güçlü, ücretsiz bir araç
  • Geliştiricilerin bir sürekli entegrasyon aracını temel almalarına ve bunun üzerine ihtiyaçlarına uygun geliştirmeler eklemelerine olanak sağlayan özelleştirilebilirlik
  • Araçları değiştirme ve yeniden dağıtma yeteneği

Yazılım geliştirme iş akışınız için düşünebileceğiniz açık kaynak sürekli entegrasyon araçları şunlardır: Jenkins, Go, Buildbot ve Travis CI. Bu araçlarla ilgili bilgileri sonraki bölümde okuyabilirsiniz.

Kullanım senaryosu

Aşağıdaki varsayımsal kullanım senaryosu, iki yazılım geliştiricinin DevOps süreçlerini iyileştirmek için sürekli entegrasyonu nasıl kullanabileceğini gösteriyor.

İki geliştirici, hangi özelliklerin işe yaradığı ve bunun yöntemi konusunda birbirleriyle iletişim kurmalıdır. Bu küçük ekibin düzenli güncellemelere ihtiyacı olur ve kodlarını bir bütün olarak entegre edebilmesi ve test edebilmesi gerekir. Kod giriş ve test zamanlaması, çok uzun geliştirme süresi gerektirir. Sürekli entegrasyon için otomatik bir sisteme ihtiyaç vardır.

Bu birleştirmelerin ve testlerin ne zaman gerçekleşeceğini müzakere etmek geliştiricilerin çok zamanını alacaktır.

Bunun için aşağıdaki konularda mutabık kalmaları gerekecektir:

  1. Kod entegrasyonunu test etmeye ne zaman başlanacağı
  2. Entegrasyonun başarısının nasıl test edileceği
  3. Sonuçların ekibe nasıl iletileceği

Sürekli entegrasyon platformlarının bu sorular için varsayılan yanıtları vardır ve bunların çoğu yapılandırmaya ve kuruluma olanak tanır.

Jenkins gibi sürekli entegrasyon platformları, entegrasyon testlerini genellikle kod girildiğinde başlatır. Sürekli entegrasyon sistemi, yeni kod girildiğinde birim testlerini ve regresyon testlerini içerebilen bir dizi test yürütür ve kodun başarıyla entegre edilip edilmediğini belirler.

Ama derlenmiş bir dil kullanıyorsanız, varsayılan test, kodun başarıyla derlenip derlenmediği olacaktır. Derlenmiyorsa, yeni kod, derlemeyi bozmuş demektir. Python ya da JavaScript gibi diller için kendi entegrasyon testinizi oluşturmanız gerekir.

Çoğu sürekli entegrasyon sistemi her iki durumda da entegrasyon girişimlerini, başarı oranını ve diğer ölçümleri log'a kaydeder.

Sunucular

Sürekli entegrasyon sunucusu, bütün sürekli entegrasyon operasyonlarınızı merkezileştiren ve projeler oluşturmanız için güvenilir ve istikrarlı bir platform sağlayan bir yazılım aracıdır. Sürekli entegrasyon sunucularını farklı platformlar için çeşitli projeler oluşturmak üzere yapılandırabilir ve ayarlayabilirsiniz. Sürekli entegrasyon sunucusu, karmaşık iş akışlarını kolayca modeller, görselleştirir (böylece sürekli teslim sağlar) ve sürekli teslim hatları oluşturmak için sezgisel bir arayüz sağlar. Sürekli entegrasyon sunucusu, aşağıdakileri yetenekleri sağlar:

  • Tek bir yerde otomatik derlemeler, testler ve yayınlar yürütme
  • Her türlü sürümü istenilen anda devreye alma
  • Yapılandırma düzenini koruma
  • İşlevleri geliştirmek için eklentileri destekleme
  • Projenizin havuzunu izleme
  • Değişiklikleri çekme ve işlemenin başarısı için tanımladığınız görevleri yürütme
  • Proje üyelerine derlemenin ayrıntılarıyla ilgili geribildirim gönderme

Testin önemi

Sürekli test, sürekli bir entegrasyon derlemesi ve bir paket ürettiğinizde başlar (kurulabilir bir varlık ya da paket varlık olarak da bilinir). Sürekli test bu paket varlık üretime girdiği zaman sona erer. Uçtan uca her adımda test bileşenleri bulunur.

Tek bir test aşamanız olduğunda, sürekli entegrasyonun en az %30'u testlerden oluşur. Gerçekte sürekli entegrasyon faaliyetlerinin %50 ila %70'i testlerden oluşur. Önceden testlerin manuel olarak yürütülmesi gerekiyordu. Artık başarılı bir sürekli entegrasyon için büyük önem taşıyan otomatik testleri kullanabilirsiniz.

Test odaklı geliştirme, sürekli entegrasyon testlerini otomatikleştirme sürecinin bir parçası olarak, yinelemeli bir şekilde kod derler ve test kapsamını sağlama almak, kod kalitesini iyileştirmek ve sürekli teslime zemin hazırlamak üzere tek seferde tek bir kullanım senaryosunu test eder. Otomatik testler, yeni kodun, uygulamanın bütün işlevsel alanlarında geliştirilmiş bir ya da daha fazla testten geçip geçemediğini size bildirir. En iyi uygulama, geliştiricilerin kendi yerel ortamlarındaki testlerin tümünü ya da bir alt kümesini çalıştırmasını gerektirir. Bu, geliştiricilerin kaynak kodunu, yeni kod değişikliklerinin testleri geçmesinden sonra sürüm denetimine sunmasını sağlar. Bu konuda edinilen deneyimler etkili regresyon testlerinin daha sonra istenmeyen beklenmedik durumları önlemeye yardımcı olduğunu göstermektedir.

Sürekli entegrasyon hattı

Sürekli entegrasyon hattı, bir projenin derlemeler, testler ve devreye alımlar gibi işlem hattı aşamalarını insan müdahalesi olmadan tekrarlanabilir bir biçimde otomatikleştirir. Denetimlere, denetim noktalarına ve hıza olanak sağlayarak uygulamalarınızın geliştirilmesini, test edilmesini ve devreye alınmasını kolaylaştırmak için otomatikleştirilmiş bir sürekli entegrasyon hattı şarttır.

En iyi uygulamalar

Sürekli entegrasyon süreci DevOps'un kritik bir bileşenidir ve geliştirme ve operasyon ekiplerinizin çalışmalarını yazılım kodlama, test etme, devreye alma ve destekleme amacıyla, paylaşılan bir havuzda birleştirmenize yardımcı olur. Başarılı olamanıza yardımcı olacak, sürekli entegrasyona ilişkin en iyi uygulamalardan bazıları şunlardır:

  • Tek bir kaynak kod havuzu bulundurun: Bir ürün oluşturulmasına ilişkin bütün dosyaları izlemek ve denetlemek için kaynak denetimi yönetimini kullanın. Bu birleştirilmiş kod tabanı, dağıtım ve görüş netliğini iyileştirir.
  • Derlemeyi otomatikleştirin: Bu, derleme çıktılarını üreten derleme, bağlama ve diğer süreçleri içerir. Kendi kendini test etme süreci de otomatikleştirilmelidir.
  • Ana hat işlemeyi günlük yapın: Geliştiricilerin, değişikliklerini her gün en az bir kez ana geliştirme akışına işlemelerini zorunlu yapın. Her geliştirici, kendi çalışma kopyasının ana geliştirme akışıyla tutarlı olduğunu doğrulamalıdır.
  • Testi üretim ortamının bir klonunda yapın: Test ortamını, nihai üretim ortamınıza mümkün olduğu kadar benzer hale getirin.
  • Devreye alımı otomatikleştirin: Derlemeleri ve testleri yürütmek için birden çok ortam (geliştirme, entegrasyon, üretim) uygulayın.

Sürekli entegrasyon ve IBM® Cloud

IBM'in yaklaşımı, projeleri tanımlamak, otomatikleştirmek ve şablonlar kullanarak güvenliği yapılandırmaktır. Bir kitaplıkta bir değişiklik gerçekleştirildiğinde, bağımlı uygulamalar yeniden oluşturulur ve bağlanır, ilişkilendirilir ya da geri bağlanır. Uygulama bağımlılıklarını anlamanız uygulamalarınızı modernize etmenize yardımcı olacaktır.

Kuruluşlar bu tür dijital dönüşümü hızlandırdıkça, iş ve BT operasyonları genelinde otomasyon ihtiyacı artar. Otomasyonun genişletilmesine yönelik bir girişim küçük, ölçülebilir düzeyde başarılı projelerle başlamalıdır; bu projeleri daha sonra diğer süreçler için ve kuruluşunuzun diğer bölümlerinde de ölçekleyebilir ve optimize edebilirsiniz.

IBM ile çalışmaya başladığınızda, her süreci daha akıllı hale getirerek inovasyonu hızlandırmaya yardımcı olan ve önceden oluşturulmuş iş akışlarını da içeren yapay zeka destekli otomasyon yeteneklerine erişim elde edeceksiniz.

Bir sonraki adımı atın:

IBM® UrbanCode Build aracından yararlanarak ölçekleme ve yapılandırma da dahil olmak üzere yazılım derlemelerinizi yönetmeye başlayın.

Bu HFS Research raporunda ele alınan otomasyon başarısının beş koşulunu (bağlantı IBM dışındadır) okuyun.

Bir IBM Cloud hesabıyla hemen başlangıç yapın.