CI/CD yazılımınızı geliştirirken yapılan güncellemelerin, yapılan testler sonrasında dağıtıma sunulma sürecidir. Örnek verecek olursak local olarak yazılımınızı geliştirdiğinizde sorunsuz olarak açıldığını görür ve bunu bir hosta yükleme işlemini başlatırsınız. Yükleme tamamlandıktan sonra yazılımınızın çalışmadığını fark edersiniz. Bunun sebebi local olarak oluşturmuş olduğunuz yapılandırma ile barındığınız sunucu arasında ki farklı konfigürasyonlar olabilmektedir. Bu nedenle büyük firmalar yazılımlarını her sistemde uygun çalışabileceğini garanti altına alabilmek için yazılımı test edebilecek kontrol ekipleri ile çalışmaya başladılar. Tabii ki yazılım ekibi ve test sürecini yöneten ekip farklı bölümler içerisinde çalıştığı için iletişim problemlerinden dolayı yazılımın dağıtım süreci fazlasıyla uzayabiliyor.
2009 yılında bunu fark eden Patrick Debois, DevOps adında bir yazılım geliştirme ve dağıtım modeli tasarladı. Bu model ile birlikte her işleyişin otomatik gelişmesi gerektiği için CI (Continuous Integration)/ CD (Continuous Delivery/Deployment) adında bir süreç ile tanışmış olduk.
Bir yazılımın sürekli güncellenip müşteriye sunulması için gerekli adımların tamamını kontrol edecek ekiplerin, süreçlerin ve kullanılan teknolojilerin birleştiği bir prensiptir. Ekipler aralarında koordine çalışması sebebiyle, geliştirme, test ve yayınlama süreci farklı bölümler tarafından yapılıyormuş gibi düşünülmeden sanki tek bir ekibin yaptığı bir süreç gibi düşünülmektedir. Bu sayede daha hızlı ve güvenli şekilde yazılımın dağıtımı ve geliştirilme süreci ilerlemektedir.
CI Nedir?
CI (Continuous Integration) “Sürekli Entergrasyon” anlamına gelir. Yazılım geliştirme ve güncelleme sürecinde etkili bir yapıdır. Sürekli entegrasyonun asıl amacı yazılımınızda yapılan sürekli güncellemeler, bir otomasyon yardımıyla yapmış olduğunuz konfigürasyonlara göre güncel dosyalarınızı derler ve çok açıdan detaylı test işlemlerinden geçirir.
Örneğin yazılımınızı native olarak Windows ve Mac cihazlar için yayınlayacaksınız, bu test sistemi eğer farklı işletim sistemini test edebilecek bir yapıdaysa test süreci başlatılacaktır. Yapmış olduğunuz konfigürasyonlar ve seçimler dahilinde bulunan diğer test denemelerini de başlatarak sizlere test sonucunu paylaşacaktır.
Farklı bir örnek ise; diyelim ki bir internet sitesi projesi tasarladınız. Bu siteyi localhost içerisinde PHP 7.3 destekleyecek şekilde oluşturdunuz ve hosting içerisine yüklemeden önce CI üzerinden test sürecinden geçirdiniz. Eğer konfigürasyonunuz içerisinde özel teste tabi tutulmasını istediyseniz, tüm PHP sürümlerinde çalışıp çalışmadığı kontrol edilecektir.
Yazılım üzerinde eğer bir sorun tespit edilirse hangi dosya içerisinde ve hangi kod bloğunda sorun veya bu hatanın neden olduğunu sizlere bildirecektir. Herhangi bir sorun olmaması durumunda sizlere testin başarılı olduğunu belirtip eğer bir CD yapısına sahipseniz, otomatik olarak yazılımınızı CD yapılandırmanıza iletecektir. Bu sayede yazılımınızı güncelleme işlemlerinde hem zamandan tasarruf edebilir hem de tüm testlerin sağlandığı için güvenli bir şekilde paylaşmak istediğiniz platformlara yazılımınızı yayınlayabilirsiniz.
Otomatik olarak yazılımınızın güncellemelerini birleştirme, derleme ve test sürecinden geçirdiği için her gün hatta her saat yazılımınızı güncelleyip güvenli bir şekilde yayınlama aşamasına geçebilirsiniz.
CD Nedir?
CD (Continuous Delivery) “Sürekli Teslimat” anlamına gelir. Sürekli teslimat, yazılımınızın yayınlama (deploy edilme) sürecindeki kontrollerini ve iş dağılımını yönetmeyi kolaylaştıran bir yapıdır. CI aşamasını geçen proje yayınlanmak istendiğinde CD sürecine geçmiş olur.
Bu süreç konfigürasyonlarla koşullandırılabilir. Yapacağınız ayarlar sayesinde otomatik yayınlama işlemine geçilmeden yönetiminize onay maili iletilebilir ve manuel onay sonucunda platformlara yayınlama işlemi otomatik olarak gerçekleştirilebilir.
CI/CD’nin Faydaları Nelerdir?
Yapılan projenin geliştirme aşamasından, dağıtım sürecine kadar her kontrol otomatik ve planlı olarak sağlandığı için en az hata ile projelerinizi yayınlayabileceksiniz. Bunun yanında ekipler arasında iletişim daha kolaylaşacağı için zamandan ve karmaşıklıktan da uzak kalınabilecektir. Geri bildirim takibi ve alınan hatanın detaylı nedenlerini görüntüleyerek güncelleme süreci daha sağlıklı ilerleyecektir. Her işlem otomatik olarak gerçekleştiği için projeden ayrılan kişilerin değişim sürecinde sorun yaşama riski en aza indirgenecektir.
Popüler Olan CI/CD Hizmeti Sağlayan Firmalar
GitLab, Jetkins, CircleCI, TeamCity, Travis CI, Bamboo gibi popüler sistemler üzerinden CI/CD hizmeti alabilirsiniz. Her firmanın ayırıcı özellikleri olduğundan dolayı projenize uygun hizmeti almadan önce bu firmaların sunduğu özellikleri araştırmanızı öneririz.