CI/CD nedir? Sürekli Entegrasyon ve Sürekli Teslimat
⚡ Akıllı Özet
Sürekli Entegrasyon, ekip üyelerinin çalışmalarını en az günde bir kez paylaşılan bir depoya birleştirdiği ve her commit işleminin entegrasyon hatalarını erken yakalamak için otomatik bir derleme ve test işlemini tetiklediği bir yazılım geliştirme uygulamasıdır.

Sürekli Entegrasyon (CI) Nedir?
Sürekli Entegrasyon Bu, ekip üyelerinin çalışmalarını günde en az bir kez entegre ettiği bir yazılım geliştirme yöntemidir. Her entegrasyon, hataları tespit eden otomatik bir derleme ile doğrulanır. Bu kavram, entegrasyonun projenin sonuna kadar ertelenmesi durumunda ortaya çıkan "entegrasyon cehenneminden" kaçınmak için yirmi yıldan fazla önce tanıtılmıştır.
Kod taahhüdünden sonra, yazılım hemen derlenir ve test edilir. Birçok geliştiricinin çalıştığı büyük bir projede, günde birçok kez kod taahhüdü yapılır. Her taahhütte kod derlenir ve test edilir; test başarılı olursa, derleme dağıtım için kontrol edilir; ve dağıtım başarılı olursa, kod üretime gönderilir. Bu taahhüt, derleme, test ve dağıtım döngüsü süreklidir, bu da uygulamaya adını verir.
Sürekli Teslimat (CD) Nedir?
Sürekli Teslim Yazılım geliştirme, bir ekibin yazılımı kısa döngülerde geliştirdiği ve her an güvenilir bir şekilde yayınlanabilmesini sağladığı bir yazılım mühendisliği yöntemidir. Amaç, yazılımı iyi bir hız ve sıklıkla oluşturmak, test etmek ve yayınlamak, böylece sık üretim güncellemeleri yoluyla değişikliklerin teslim edilmesinin maliyetini, süresini ve riskini azaltmaktır.
CI ve CD Arasındaki Fark
Sürekli Entegrasyon Test tabanlı yaklaşım, kod tabanındaki her değişikliği otomatik olarak test etmeyi içerirken, Sürekli Teslimat ise yeni özellikler, yapılandırma ve hata düzeltmeleri gibi değişiklikleri üretim ortamına güvenli ve hızlı bir şekilde aktarmayı amaçlayan bir yaklaşımdır.
Sürekli Entegrasyon Olmadan Geliştirme vs. Sürekli Entegrasyon ile Geliştirme
| CI olmadan geliştirme | CI ile geliştirme |
|---|---|
| Birçok hata | 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 | Testler erken ve sık sık yapılır. |
| Sorunları düzeltmek daha zor. | Sorunlar daha hızlı tespit edilip çözülüyor. |
| 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 kodu makine diline dönüştürürken, CI daha geniş kapsamlı çeşitli faaliyetler gerçekleştirir:
- Veritabanı entegrasyonu: Veritabanı ve kodu senkronize halde tutar ve veritabanı ile test verilerinin oluşturulmasını otomatikleştirir.
- Code muayene: Sağlıklı bir kod tabanı sağlar, sorunları erken tespit eder ve en iyi uygulamaları uygular.
- Otomatik dağıtım: Ürünü istediğiniz zaman yayınlamanıza ve sürekli olarak demo edilebilir durumda tutmanıza olanak tanır.
- Belge oluşturma: Dokümantasyonu güncel tutar ve derleme raporları ve ölçümleri üretir.
- Derleme: Yüksek seviyeli kodu makine diline dönüştürür ve her hedef platformda derlenmesini sağlar.
İdeal olarak, derleme işlemi bir IDE'ye bağlı kalmak yerine komut satırından çalıştırılır, özel bir CI sunucusunda sürekli olarak gerçekleşir (cron işi değil), her kod gönderiminde tetiklenir ve geliştirici çabası gerektirmeden anında geri bildirim sağlar.
Sürekli İyileştirme (CI) sürecini yürütmek için nelere ihtiyacınız var?
- Sürüm Kontrol Sistemi (VCS): Projenizde zaman içinde yapılan değişiklikleri merkezileştirmenin ve korumanın güvenilir bir yöntemi.
- Sanal makine: Yedek bir sunucu veya en az bir tane Sanal makine sisteminizi oluşturmak için.
- Barındırılan CI araç çözümleri: Sunucuları yönetme zahmetinden kurtulmak için, barındırma çözümleri tüm süreci üstlenir ve daha kolay ölçeklenebilirlik sunar.
- Araçlar: Kendi sunucunuzda barındırma seçeneğini tercih ederseniz, aşağıdaki gibi bir CI aracı kurun: Jenkins, TeamCity, Bambooveya GitLab.
Sürekli Entegrasyon Nasıl Çalışır?
Eski bir örnek olarak Nokia'yı gösterebiliriz; şirket bir zamanlar "gece derlemesi" adı verilen bir prosedür kullanıyordu. Gün içinde birçok geliştiriciden gelen çok sayıda kod değişikliğinden sonra, yazılım her gece derleniyordu. Günde sadece bir kez derlendiği için, büyük bir kod tabanındaki hataları izole etmek, tanımlamak ve düzeltmek oldukça zahmetliydi.
Later Ekip, Sürekli Entegrasyon yöntemini benimsedi. Yazılım, geliştirici kodu gönderir göndermez derlenip test edildi, böylece herhangi bir hata anında tespit edildi ve sorumlu geliştirici hatayı hızla düzeltebildi.
CI'nin özellikleri
- Tek bir kaynak deposunu yönetmenize olanak tanır.
- Üretim ortamına yakın tutulan, üretim ortamının bir kopyasını test etmenizi sağlar.
- Güncel bir sürümün sürekli olarak kullanılabilirliğini sağlar.
- Tüm derleme, test ve dağıtım sürecini tüm paydaşlar için görünür hale getirir.
CI'yı Neden Kullanmalısınız?
- Daha kaliteli yazılım geliştirmenize ve tekrarlanabilir testler yapmanıza yardımcı olur.
- Mühendislik ekiplerinin teslimat çıktısını ölçeklendirir ve geliştiricilerin özellikler üzerinde paralel olarak çalışmasına olanak tanır.
- Ekip genelinde görünürlüğü ve iletişimi artırır.
- Bir sorun ortaya çıktığında anında geri bildirim sağlar ve dağıtımı daha hızlı ve öngörülebilir hale getirerek riski azaltır.
- Yayın zamanında son dakika karışıklığını önler.
CI Sistemlerinin Kullanımında En İyi Uygulamalar
- Kod değişikliklerini erken ve sık sık yapın, asla bozuk kod göndermeyin.
- Derleme hatalarını derhal düzeltin ve ölçümlere göre hareket edin.
- Her hedef ortamda derleme yapın ve her derlemeden çıktı dosyaları oluşturun.
- Derleme işlemini otomatikleştirin, böylece bir IDE'ye bağımlı kalmasın.
- Veritabanı şeması da dahil olmak üzere her şey değiştiğinde, bunları derleyin ve test edin.
- Derleme sürecini hızlı tutun ve otomatik dağıtım kullanın.
CI'nin dezavantajları
- CI sunucusuna alışmak için başlangıç kurulum süresi ve eğitim gereklidir.
- Uygun test prosedürleri geliştirilmeli ve iyi yapılandırılmış bir test paketi önemli kaynaklar gerektirir.
- Alışılmış süreçlerin dönüştürülmesi gerekiyor ve ek sunuculara ve ortamlara ihtiyaç duyuluyor.
- Birden fazla geliştiricinin kodlarını aynı anda entegre etmek istemesi durumunda bekleme süreleri oluşabilir.
Sürekli Entegrasyon Süreci için Araçlar
Jenkins
Jenkins , ile yazılmış açık kaynaklı bir sürekli entegrasyon aracıdır. JavaBu, daha büyük bir kod tabanındaki izole değişiklikler üzerinde gerçek zamanlı test ve raporlama yapılmasını kolaylaştırır ve geliştiricilerin hataları hızlı bir şekilde bulup çözmelerine yardımcı olurken, derleme testlerini de otomatikleştirir.
Bamboo
Bamboo Sürekli entegrasyon sağlayan bir derleme sunucusudur ve otomatik derleme, test ve yayınlama işlemlerini tek bir yerde gerçekleştirir. Jira ile sorunsuz bir şekilde çalışır ve Bitbucket Ayrıca Docker, Git, SVN, Mercurial ve AWS gibi birçok teknolojiyi desteklemektedir.
TeamCity
TeamCity Birçok güçlü özelliğe sahip sürekli entegrasyon sunucusudur. Hiçbir derleme çalışmıyor olsa bile CI sunucusunu sağlıklı ve istikrarlı tutar ve herhangi bir proje için daha iyi kod kalitesi sağlar.
