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 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
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?
- İ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?
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.
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 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 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 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ı.