CI/CD nedir? Sürekli Entegrasyon ve Sürekli Teslimat

Sürekli Entegrasyon (CI) Nedir?

Sürekli Entegrasyon ekip üyelerinin günde en az bir kez çalışmalarını entegre ettiği bir yazılım geliştirme yöntemidir. Bu yöntemde her entegrasyon, hataları tespit etmek için otomatikleştirilmiş bir yapı tarafından kontrol edilir. Bu kavram ilk olarak yirmi yılı aşkın bir süre önce, entegrasyonun bir projenin sonuna ertelenmesiyle ortaya çıkan "entegrasyon cehenneminden" kaçınmak için tanıtıldı.

Sürekli Entegrasyonda, bir kod işleme sonrasında yazılım hemen oluşturulur ve test edilir. Birçok geliştiricinin bulunduğu büyük bir projede, taahhütler gün içinde birçok kez yapılır. Her taahhüt koduyla birlikte oluşturulur ve test edilir. Test başarılı olursa, derleme dağıtım için test edilir. Dağıtım başarılı olursa kod Üretim'e aktarılır. Bu taahhüt etme, oluşturma, test etme ve dağıtma sürekli bir süreçtir ve dolayısıyla sürekli entegrasyon/dağıtım adıdır.

Sürekli Teslimat (CD) Nedir?

Sürekli Teslim bir ekibin kısa bir döngüde yazılım ürünleri geliştirdiği bir yazılım mühendisliği yöntemidir. Yazılımın herhangi bir zamanda kolayca yayınlanabilmesini sağlar. Sürekli teslimatın temel amacı, yazılımı iyi bir hız ve sıklıkta oluşturmak, test etmek ve yayınlamaktır. Üretimde sık güncellemelere izin vererek değişiklikleri teslim etmenin maliyetini, süresini ve riskini azaltmanıza yardımcı olur.

CI ve CD arasındaki fark nedir?

CI ve CD: Sürekli Entegrasyon (CI), kod tabanındaki her değişikliği otomatik olarak test etmeye yönelik bir yaklaşımdır; Sürekli Teslimat (CD), yeni özelliklerdeki, yapılandırmadaki ve hata düzeltmelerindeki değişiklikleri elde etmeye yönelik bir yaklaşımdır.

CI olmadan Geliştirme vs. CI ile Geliştirme

CI kullanarak veya CI olmadan geliştirme arasındaki temel farklar şunlardır:

CI olmadan geliştirme CI ile geliştirme
Çok sayıda böcek Daha az hata
Seyrek taahhütler Düzenli taahhütler
Seyrek ve yavaş salınımlar Düzenli çalışan sürümler
Zor entegrasyon Kolay ve Etkili Entegrasyon
Test geç yapılıyor Sürekli Entegrasyon testleri erken ve sıklıkla gerçekleştirilir.
Ortaya çıkan sorunun düzeltilmesi daha zordur Sorunları daha hızlı ve daha verimli bir şekilde bulun ve düzeltin.
Proje görünürlüğünün zayıf olması Daha iyi proje görünürlüğü

Derleme ve Sürekli Entegrasyon Arasındaki Fark

Sürekli Entegrasyon Faaliyetleri
Sürekli Entegrasyon Faaliyetleri

Derleme yalnızca bir kodu derlerken, CI aşağıdaki etkinlikleri yapar

Veritabanı entegrasyonu

  • Veritabanı ve kodun senkronize olduğundan emin olun
  • Veritabanı ve test verilerinin otomatik olarak oluşturulması.

Kod Denetimi

  • Sağlıklı bir kod tabanı sağlar
  • Sorunları erken tespit eder ve en iyi uygulamaları uygular

Otomatik Dağıtım

  • İstediğiniz zaman ürünü piyasaya sürmenizi sağlar
  • Sürekli olarak demo yapılabilen durum ve her makinede çalışır

Belge oluşturma

  • Belgelerin güncel olduğundan emin olun
  • Yakılanları geliştiriciden kaldırır
  • Derleme raporları ve ölçümler üretir

Derleme

Derleme, bilgisayarın üst düzey bir programlama dili kodunu bilgisayarın anlayabileceği bir makine diline dönüştürmek için yaptığı işlemdir. Her hedef platformda bir kod derleyicisi olmasını sağlar.

Ne zaman inşa edeceğim?

  • Her check-in sırasında
  • Bir bağımlılık her değiştiğinde

Sürekli entegrasyonda hangi adımlar vardır?

CI Süreci
CI süreci
  • İdeal olarak derlemenin komut satırından gelmesi ve entegre geliştirme ortamına (IDE) bağlı olmaması gerekir.
  • Derleme, bir cron işi değil, özel bir Cl sunucusu kullanılarak sürekli olarak gerçekleşmelidir.
  • Yerleşik CI yalnızca gece yarısında değil, her girişte tetiklenmelidir
  • Derleme anında geri bildirim sağlamalı ve geliştirici çabası gerektirmemelidir
  • Temel metrikleri tanımlayın ve bunları görsel olarak izleyin. Daha da önemlisi, hemen harekete geçin

CI sürecini yürütmek için neye ihtiyacınız var?

CI Sürecini Yürütmek

Tüm CI sürecini gerçekleştirmek için ihtiyaç duyduğunuz temel unsurlar şunlardır:

  • Sürüm Kontrol Sistemi (VCS): Projenizde zaman içinde yapılan değişiklikleri merkezileştirmek ve korumak için güvenilir bir yöntem sunar.
  • Sanal makine: Yedek bir sunucunuz veya en az bir tane olmalıdır Sanal makine sisteminizi oluşturmak için.
  • Barındırılan CI Aracı Çözümleri: Sunuculardan veya sanal makinelerden kaçınmak için barındırılan CI aracı çözümlerini tercih etmelisiniz. Bu araç, tüm sürecin bakımına yardımcı olur ve daha kolay ölçeklenebilirlik sunar.
  • Araçlar: Kendi kendine barındırılan bir varyant seçerseniz, birçok seçenekten birini yüklemeniz gerekecektir. CI araçları Jenkins gibi, TeamCity, Bamboo, GitLab vb.

Sürekli entegrasyon nasıl çalışır?

Eski Nokia telefonundan mutlaka haberdarsınızdır. Nokia, gecelik oluşturma adı verilen bir prosedürü uygulardı. Gün boyunca farklı geliştiricilerin çok sayıda taahhütünden sonra yazılım her gece oluşturuldu. Yazılım günde yalnızca bir kez oluşturulduğundan, büyük bir kod tabanındaki hataları izole etmek, tanımlamak ve düzeltmek büyük bir zahmettir.

LaterSürekli Entegrasyon yaklaşımını benimsediler. Yazılım, geliştirici kodu taahhüt eder etmez oluşturuldu ve test edildi. Herhangi bir hata tespit edilirse ilgili geliştirici hatayı hızlı bir şekilde düzeltebilir.

Sürekli Entegrasyon Örneği
Sürekli Entegrasyon Örneği

CI'nin özellikleri

Sürekli Entegrasyonun önemli özellikleri ve faydaları şunlardır:

  • Yalnızca tek bir kaynak deposunu korumanıza olanak tanır
  • Üretim CI ortamının klonunu test edebilirsiniz
  • Yapılı çevre üretim ortamına yakın olmalıdır.
  • Sürekli entegrasyonun avantajlarından biri mevcut yapının sürekli kullanılabilirliğidir
  • Oluşturma, test etme ve devreye alma sürecinin tamamı tüm yığın sahipleri tarafından görülebilmelidir.

Neden CI Kullanılmalı?

Sürekli Entegrasyon'u kullanmanın önemli nedenleri şunlardır:

  • Daha kaliteli yazılım oluşturmanıza yardımcı olur
  • CI süreci, mühendislik ekiplerinin personel sayısını ve teslimat çıktısını artırmaya yardımcı olur.
  • CI, yazılım geliştiricilerin paralel olarak özellikler üzerinde bağımsız olarak çalışmasına olanak tanır.
  • Tekrarlanabilir testler yapmanıza yardımcı olur
  • Daha fazla iletişim sağlayarak görünürlüğü artırın
  • Tam otomatik yapı için potansiyel olarak gönderilebilir bir ürün geliştirmeye yardımcı olur
  • Dağıtımı daha hızlı ve daha öngörülebilir hale getirerek riskleri azaltmanıza yardımcı olur
  • sorun geldiğinde anında geri bildirim
  • Yayın tarihi ve zamanlaması konusunda son dakika karışıklıklarını önleyin

CI Sistemlerini kullanmanın en iyi uygulamaları

Uygulama sırasındaki bazı önemli en iyi uygulamaları burada bulabilirsiniz

  • Erken Taahhüt Edin ve Çoğunlukla Taahhüt Edin Asla Bozuk Kodu Taahhüt Etmeyin
  • Derleme hatalarını hemen düzeltin
  • Metriklere göre hareket edin
  • Her hedef ortamda yerleşik Her yapıdan eserler oluşturun
  • Yazılımın oluşturulmasının otomatikleştirilebilecek şekilde yapılması gerekir.
  • Bir IDE'ye bağlı kalmayın
  • Değiştiğinde her şeyi oluşturun ve test edin
  • Veritabanı şeması her şey sayılır
  • Temel metrikleri bulmanıza ve bunları görsel olarak izlemenize yardımcı olur
  • Sık sık ve erken check-in yapın
  • Daha güçlü kaynak kodu kontrolü
  • Sürekli entegrasyon, kodu her kaydettiğinizde birim testleri çalıştırıyor
  • Derlemeyi otomatikleştirin ve herkesi test edin
  • Otomatik dağıtımla derlemeyi hızlı tutun

CI'nin dezavantajları

Sürekli Entegrasyon sürecinin eksileri/dezavantajları şunlardır:

  • Cl sunucusunu tanımak için ilk kurulum süresi ve eğitim gereklidir
  • Uygun test prosedürlerinin geliştirilmesi esastır
  • İyi geliştirilmiş test paketi, Cl sunucusu için birçok kaynak gerektiriyordu
  • Tanıdık süreçlerin dönüştürülmesi
  • Ek sunucular ve ortamlar gerektirir
  • Birden fazla geliştiricinin kodlarını aynı anda entegre etmek istemesi durumunda bekleme süreleri ortaya çıkabilir

CI süreci için araçlar

En önemli CI/CD araçlarından bazılarını burada bulabilirsiniz:

Jenkins

Jenkins

Jenkins açık kaynaklı bir sürekli entegrasyon yazılımıdır. kullanılarak yazılmıştır. Java Programlama dili. Daha büyük bir kod tabanında izole edilmiş değişikliklerin gerçek zamanlı test edilmesini ve raporlanmasını kolaylaştırır. Bu yazılım, geliştiricilerin kod tabanlarındaki kusurları hızla bulmasına ve çözmesine ve yapılarının testini otomatikleştirmesine yardımcı olur.

Bamboo

Bamboo

Bamboo tek bir yerde otomatik oluşturma, test etme ve yayınlama işlemlerini gerçekleştiren, sürekli entegrasyona sahip bir yapı sunucusudur. JIRA yazılımı ve Bitbucket ile sorunsuz çalışır. Bamboo CodeDeply, Docker, Git, SVN, Mercurial, AWS ve benzeri birçok dili ve teknolojiyi destekler Amazon S3 kovaları.

TeamCity

TeamCity

TeamCity birçok güçlü özelliği destekleyen bir Sürekli Entegrasyon sunucusudur. Hiçbir yapı çalışmadığında bile CI sunucusunun sağlıklı ve istikrarlı kalmasını sağlar. Her proje için daha iyi kod kalitesi sağlar

ÖZET

  • Sürekli Entegrasyon tanımı: Sürekli entegrasyon, ekip üyelerinin günde en az bir kez çalışmalarını entegre edebildiği bir yazılım geliştirme yöntemidir.
  • CI/CD, Sürekli Entegrasyon ve Sürekli Teslimat veya Sürekli Dağıtımın birleşimi anlamına gelir.
  • CI'sız geliştirme çok sayıda hata yaratırken CI'lı geliştirme daha az hata sunar
  • Sürekli Entegrasyonun önemli faaliyetleri şunlardır: 1) Veritabanı entegrasyonu, 2) Kod Denetimi, 3) Otomatik Dağıtım, Belge oluşturma ve Derleme.
  • Derleme, bir cron işi değil, özel bir Cl sunucusu kullanılarak sürekli olarak gerçekleşmelidir.
  • CI'nın önemli unsurları şunlardır: 1) Sürüm Kontrol Sistemi 2) Sanal Makine 3) Ana Bilgisayar CI Aracı çözümleri 4) Araçlar
  • Sürekli Entegrasyon sistemi yalnızca tek bir kaynak deposunu korumanıza olanak tanır
  • CI/CD süreci daha kaliteli yazılım oluşturmanıza yardımcı olur
  • En önemli en iyi uygulamalar Azure Sürekli Entegrasyon süreci, Erken Taahhüt Etmektir ve Çoğu Zaman Taahhüt, Bozuk Kodu Asla Taahhüt Etmemektir
  • En büyük dezavantajı CI/CD ardışık düzeni süreç, iyi geliştirilmiş test paketinin Cl sunucusu için birçok kaynak gerektirmesidir
  • Jenkins, Bambook ve Team City bazı yararlı AWS Continuous'lardır Entegrasyon araçları.