
📌 Öne Çıkan Noktalar
CI/CD ile alakalı bilmeniz gereken 5 kritik nokta;
- CI/CD (Continuous Integration / Continuous Delivery veya Deployment), yazılım geliştirme süreçlerinde kod değişikliklerinin otomatik olarak test edilmesini, hazırlanmasını ve dağıtılmasını sağlayan uygulamalar bütünüdür.
- Continuous Integration (CI), geliştiricilerin kod değişikliklerini ortak bir depoda birleştirmesini ve bu değişikliklerin otomatik testlerden geçirilmesini sağlar.
- Continuous Delivery ve Continuous Deployment, yazılımın dağıtıma hazır tutulmasını veya testlerden geçen sürümlerin otomatik olarak canlı ortama aktarılmasını amaçlar.
- CI/CD Pipeline, kod değişikliklerinin derleme, test ve dağıtım gibi aşamalardan geçtiği otomatik iş akışıdır.
- Jenkins, GitHub Actions ve GitLab CI/CD, yazılım geliştirme ekiplerinin entegrasyon, test ve dağıtım işlemlerini otomatikleştirmek için kullanabileceği yaygın araçlardır.
CI/CD (Continuous Integration / Continuous Delivery veya Continuous Deployment), yazılım geliştirme süreçlerinde kod değişikliklerinin otomatik olarak test edilmesini, hazırlanmasını ve dağıtılmasını sağlayan uygulamalar bütünüdür. Türkçede sürekli entegrasyon ve sürekli teslimat veya dağıtım olarak ifade edilir. CI/CD yaklaşımı, geleneksel yazılım geliştirme süreçlerini otomatikleştirerek yazılım güncellemelerinin daha hızlı, kontrollü ve tekrarlanabilir şekilde gerçekleştirilmesini amaçlar.
CI/CD Ne İşe Yarar?
CI/CD, yazılım ekiplerinin geliştirdiği yeni özellikleri, hata düzeltmelerini ve güvenlik güncellemelerini belirli kontrollerden geçirerek kullanıcılara ulaştırmasına yardımcı olur.
Mesela bir web uygulamasında yapılan değişikliklerin manuel olarak sunucuya yüklenmesi, dosya eksikliklerine veya sürüm uyuşmazlıklarına neden olabilir. CI/CD kullanıldığında kod değişiklikleri otomatik testlerden geçirilir ve belirlenen koşullar sağlandığında dağıtım süreci başlatılabilir.
Özellikle VDS server altyapısı üzerinde çalışan özel web uygulamalarında, otomatik dağıtım süreçleri güncellemelerin daha düzenli yönetilmesini sağlayabilir. CI/CD kullanımının temel amaçları şunlardır:
Yazılım güncellemelerini hızlandırmak
Tekrarlanan test ve dağıtım işlemlerini otomatikleştirmek.
Hataları erken tespit etmek
Kod değişikliklerini canlı ortama ulaşmadan önce kontrol etmek.
Manuel işlemleri azaltmak
Dosya yükleme, derleme ve test gibi işlemleri standartlaştırmak.
Ekip çalışmasını kolaylaştırmak
Farklı geliştiricilerin yaptığı değişiklikleri ortak bir süreçte değerlendirmek.
Dağıtım süreçlerini izlemek
Hangi sürümün ne zaman hazırlandığını ve dağıtıldığını takip etmek.
CI/CD Neden Önemlidir?
Yazılım projeleri büyüdükçe kod değişikliklerinin kontrol edilmesi zorlaşabilir. Özellikle birden fazla geliştiricinin aynı proje üzerinde çalışması, entegrasyon hataları ve sürüm uyuşmazlıkları oluşturabilir.
CI/CD, değişikliklerin küçük parçalar halinde ve sık aralıklarla test edilmesini destekleyerek bu risklerin azaltılmasına yardımcı olur.
Manuel Yazılım Dağıtımından Farkı
Manuel dağıtım
CI/CD yaklaşımı
CI ve CD Ne Anlama Gelir?
CI/CD iki temel kavramdan oluşur. CI, kod değişikliklerinin ortak projeye entegre edilmesine odaklanırken CD, test edilen yazılımın dağıtıma hazırlanması veya otomatik dağıtılmasıyla ilgilenir.
CIContinuous IntegrationSürekli Entegrasyon
Kod değişiklikleri ortak depoya aktarılır ve otomatik kontrollerden geçirilir.
CDContinuous DeliverySürekli Teslimat
Testleri geçen yazılım, canlıya alınmaya hazır durumda tutulur.
CDContinuous DeploymentSürekli Dağıtım
Testleri geçen değişiklikler manuel onay olmadan canlıya alınır.

Continuous Integration (Sürekli Entegrasyon) Nedir?
Continuous Integration (CI), geliştiricilerin yaptıkları kod değişikliklerini düzenli olarak ortak kod deposuna aktarması ve bu değişikliklerin otomatik kontrollerden geçirilmesidir.
Örneğin bir geliştirici Git deposuna yeni kod gönderdiğinde CI sistemi otomatik olarak çalışabilir. Kod derlenir, testler gerçekleştirilir ve hata bulunursa geliştiriciye bildirim gönderilir.
Bu yaklaşım, farklı geliştiricilerin yaptığı değişikliklerin birbiriyle uyumlu olup olmadığının erken aşamada kontrol edilmesini sağlar.
Continuous Delivery (Sürekli Teslimat) Nedir?
Continuous Delivery, testlerden başarıyla geçen yazılımın canlı ortama dağıtılabilecek durumda tutulmasını amaçlar.
Bu yaklaşımda derleme ve test işlemleri otomatik gerçekleştirilebilir. Ancak üretim ortamına dağıtım için manuel onay gerekebilir. Örneğin yeni sürüm tüm testleri geçtikten sonra sistem yöneticisinin onayıyla canlıya alınabilir.
Continuous Deployment (Sürekli Dağıtım) Nedir?
Continuous Deployment, başarılı testlerden geçen yazılım değişikliklerinin ek bir manuel onay gerektirmeden üretim ortamına dağıtılmasıdır. Sürekli teslimattan temel farkı, canlıya alma aşamasının da otomatikleştirilmesidir.
| Özellik | Continuous Delivery | Continuous Deployment |
|---|---|---|
| Otomatik test | Var | Var |
| Dağıtıma hazırlık | Otomatik | Otomatik |
| Canlıya alma | Genellikle manuel onaylı | Otomatik |
| Temel amaç | Yazılımı yayına hazır tutmak | Yazılımı otomatik yayımlamak |
Bu ayrım, CI/CD süreçlerinin doğru anlaşılması açısından önemlidir.
CI/CD Pipeline Nedir ve Nasıl Çalışır?
CI/CD Pipeline, kod değişikliğinden yazılımın dağıtımına kadar gerçekleştirilen otomatik işlemlerin sıralı iş akışıdır. Pipeline içerisinde kod kontrolü, bağımlılıkların kurulması, derleme, test ve dağıtım gibi aşamalar bulunabilir.

Kod Değişikliklerinin Git Deposuna Gönderilmesi
CI/CD süreci genellikle geliştiricinin kod değişikliklerini GitHub veya GitLab gibi bir kaynak kod deposuna göndermesiyle başlar.
Örnek olarak git push işlemi, önceden tanımlanan bir pipeline’ı tetikleyebilir. Böylece yeni kodun kontrol edilmesi için manuel işlem yapılması gerekmez.
Build ve Otomatik Test Aşamaları
Build aşamasında yazılımın çalışması için gerekli dosyalar hazırlanır, bağımlılıklar yüklenir ve gerekiyorsa kod derlenir. Ardından otomatik testler çalıştırılır. Bu testler birim testlerini, entegrasyon testlerini veya güvenlik kontrollerini içerebilir.
Test başarısız olursa
Testlerden biri başarısız olursa pipeline durdurulabilir. Böylece hatalı değişikliklerin sonraki aşamalara geçmesi engellenebilir.
Deployment (Dağıtım) ve Canlıya Alma
Deployment, hazırlanan yazılım sürümünün hedef çalışma ortamına aktarılmasıdır. Dağıtım geliştirme, test veya üretim ortamına yapılabilir. Kullanılan CI/CD modeline göre üretim ortamına geçiş otomatik gerçekleştirilebilir ya da manuel onay gerektirebilir.
CI/CD Araçları Nelerdir?
CI/CD süreçlerini otomatikleştirmek için farklı araçlar kullanılabilir. Bu araçlar kod depolarıyla entegre çalışarak test ve dağıtım iş akışlarının yönetilmesini sağlar.
JenkinsAçık kaynak
Derleme, test ve dağıtım işlemlerini otomatikleştiren açık kaynaklı otomasyon sunucusu.
GitHub ActionsYAML iş akışları
GitHub depolarındaki olaylara bağlı olarak otomatik iş akışları oluşturur.
GitLab CI/CD.gitlab-ci.yml
GitLab projelerinde derleme, test ve dağıtım süreçlerini yönetir.
Jenkins
Jenkins, açık kaynaklı bir otomasyon sunucusudur. Yazılım projelerinde derleme, test ve dağıtım işlemlerini otomatikleştirmek için kullanılır. Eklenti desteği sayesinde farklı geliştirme araçlarıyla entegre edilebilir. Ancak kurulumu, güncellenmesi ve yönetimi teknik bakım gerektirebilir.
GitHub Actions
GitHub Actions, GitHub depolarındaki olaylara bağlı olarak otomatik iş akışları oluşturmayı sağlar. Örnek olarak bir pull request açıldığında testlerin çalıştırılması veya ana dala kod gönderildiğinde uygulamanın dağıtılması için kullanılabilir. İş akışları genellikle YAML dosyalarıyla tanımlanır.
GitLab CI/CD
GitLab CI/CD, GitLab projeleri içerisinde derleme, test ve dağıtım süreçlerini yönetmek için kullanılan otomasyon sistemidir.
Pipeline görevleri .gitlab-ci.yml dosyası üzerinden tanımlanabilir. İşlemler GitLab Runner bileşenleri aracılığıyla çalıştırılır.
Araç seçimi
Hangi aracın seçileceği; mevcut kod deposuna, ekip deneyimine, altyapı ihtiyaçlarına ve bakım kapasitesine göre değerlendirilmelidir.
CI/CD Pipeline Nasıl Kurulur?
CI/CD kurulumu için öncelikle kaynak kodun bir sürüm kontrol sisteminde tutulması ve otomatikleştirilecek işlemlerin belirlenmesi gerekir. Ardından seçilen CI/CD aracı üzerinden derleme, test ve dağıtım adımları tanımlanır.
GitHub Actions ile Basit CI/CD Örneği
GitHub Actions kullanılarak bir Node.js projesinin otomatik test edilmesi sağlanabilir. Bunun için proje deposunda .github/workflows/ci.yml dosyası oluşturulabilir.
Bu örnekte ana dala kod gönderildiğinde veya pull request açıldığında GitHub Actions otomatik olarak çalışır. Sistem Node.js ortamını hazırlar, bağımlılıkları yükler ve test komutunu çalıştırır.
Bilmekte fayda var
İş akışının başarılı olması için projede uygun package.json, kilit dosyası ve çalışan bir test komutu bulunmalıdır. Bu örnek yalnızca CI aşamasını gerçekleştirir. Canlı ortama otomatik dağıtım için ayrıca bir deployment görevi tanımlanmalıdır.
CI/CD ile Sunucuya Otomatik Dağıtım
CI/CD süreçleri testlerden geçen uygulamaların uzak sunuculara dağıtılmasında da kullanılabilir. Örnek olarak VPS server üzerinde çalışan bir Node.js uygulaması için şu iş akışı oluşturulabilir:

- Geliştirici yeni kodu Git deposuna gönderir.
- CI sistemi bağımlılıkları yükler ve testleri çalıştırır.
- Başarılı sürüm için dağıtım paketi hazırlanır.
- Paket güvenli bağlantı üzerinden hedef sunucuya aktarılır.
- Uygulama kontrollü şekilde yeniden başlatılır ve sağlık kontrolleri yapılır.
Güvenli dağıtım için
Bu işlemlerin güvenli şekilde yürütülebilmesi için SSH anahtarlarının korunması, dağıtım yetkilerinin sınırlandırılması ve gerekli durumlarda manuel onay mekanizmalarının kullanılması önemlidir.
CI/CD Kullanmanın Avantajları Nelerdir?
CI/CD, yazılım geliştirme ve dağıtım süreçlerinin standartlaştırılmasına yardımcı olur. Özellikle sık güncelleme yapılan projelerde tekrarlanan işlemlerin otomatikleştirilmesi önemli kolaylıklar sağlayabilir. Başlıca avantajları şunlardır:
Not
CI/CD kullanılması, yazılımın hatasız olacağını veya dağıtımların hiçbir zaman kesintiye neden olmayacağını garanti etmez. Otomasyonun güvenilirliği, test kapsamına ve yapılandırmanın doğruluğuna bağlıdır.
CI/CD ile DevOps Arasındaki Fark Nedir?
CI/CD ve DevOps birbiriyle ilişkili kavramlar olsa da aynı anlama gelmez.
DevOps
CI/CD
Dolayısıyla CI/CD, DevOps uygulamalarını destekleyen önemli yöntemlerden biridir.
CI/CD Süreçlerinde Güvenlik ve Dikkat Edilmesi Gerekenler
CI/CD sistemleri kaynak kod depolarına, sunuculara ve dağıtım ortamlarına erişebildiği için güvenlik açısından dikkatli yapılandırılmalıdır.
Ciddi riskler!
Otomasyon sistemlerine gereğinden fazla yetki verilmesi, erişim bilgilerinin açığa çıkması veya güvenilmeyen kodların çalıştırılması ciddi riskler oluşturabilir.
Erişim Anahtarları ve Gizli Bilgilerin Korunması
API anahtarları, SSH özel anahtarları ve erişim belirteçleri doğrudan kaynak kod içerisine yazılmamalıdır. Bu bilgiler, kullanılan CI/CD platformunun güvenli secret yönetimi özellikleri üzerinden saklanmalıdır.
Hatalı Dağıtımlarda Rollback ve Yedekleme
Rollback, sorunlu bir yazılım sürümünden önceki kararlı sürüme geri dönme işlemidir. CI/CD süreçlerinde geri dönüş planının önceden hazırlanması, hatalı dağıtımların etkisini azaltabilir.
Yalnızca dosyaları geri almak yetmeyebilir!
Uygulama dosyalarını önceki sürüme döndürmek her zaman yeterli değildir. Veritabanı şeması değişiklikleri ve kullanıcı verileri de dikkate alınmalıdır. Özellikle kritik uygulamalarda dağıtım öncesi yedekleme, sürüm kontrolü ve sağlık kontrolleri birlikte planlanmalıdır.
Sıkça Sorulan Sorular
CI/CD için hangi araçlar kullanılır?
CI/CD süreçlerinde Jenkins, GitHub Actions, GitLab CI/CD ve Azure Pipelines gibi araçlar kullanılabilir. Araç seçimi, projenin geliştirme ortamına ve otomasyon ihtiyaçlarına göre yapılmalıdır.
CI/CD sadece büyük projelerde mi kullanılır?
Hayır. CI/CD küçük yazılım projelerinde de kullanılabilir. Tek geliştiricili projelerde bile otomatik testlerin çalıştırılması ve dağıtım işlemlerinin standartlaştırılması fayda sağlayabilir.
CI/CD ile Git aynı şey mi?
Git, kaynak kod değişikliklerini takip etmek için kullanılan bir sürüm kontrol sistemidir. CI/CD ise bu değişikliklerin otomatik olarak test edilmesi ve dağıtılmasıyla ilgili süreçleri kapsar. Git, CI/CD iş akışlarını tetiklemek için kullanılabilir.
CI/CD için sunucu gerekli mi?
CI/CD işlemlerinin çalıştırılması için bir yürütme ortamına ihtiyaç vardır. Ancak bu ortamın kullanıcı tarafından yönetilen fiziksel veya sanal bir sunucu olması zorunlu değildir. GitHub Actions gibi platformların sağladığı barındırılan çalışma ortamları da kullanılabilir.

Merhaba, ben Ömer Faruk Çolak. Dijital dünyada var olmanın ve web projelerini en verimli şekilde yönetmenin yollarını keşfetmeyi çok seviyorum 🤗
Yıllardır SEO uzmanı ve içerik üreticisi olarak; web barındırma, sunucu teknolojileri ve dijital pazarlama üzerine pratik rehberler kaleme alıyorum. Karmaşık teknik süreçleri en anlaşılır hale getirmeyi amaçlayan tecrübelerimi ve ipuçlarını Turkishost blogunda sizlerle paylaşıyorum. Amacım, teknik detaylarda kaybolmadan projelerinizi bir üst seviyeye taşımanıza yardımcı olmak 🚀🚀
