CI/CD Nedir, Nasıl Kurulur?

Yazar: Ahmet YılmazYayın: 20 Ağu 2026Güncelleme: 28 Ağu 202616 dk Okuma

Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD), yazılım geliştirme süreçlerini otomatikleştirerek kod hatalarını azaltan ve hızlı sürüm çıkmayı sağlayan bir metodolojidir.

CI/CD Nedir, Nasıl Kurulur? için öne çıkan görsel
CI/CD Nedir, Nasıl Kurulur? için öne çıkan görsel

Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD), yazılım geliştirme süreçlerini otomatikleştirerek kod hatalarını azaltan, kalite standartlarını yükselten ve pazara çıkış hızını artıran modern bir mühendislik metodolojisidir. Yazılım yaşam döngüsündeki manuel adımları ortadan kaldıran bu yaklaşım, kaynak kod değişikliklerinin güvenli, test edilmiş ve tutarlı bir şekilde canlı ortamlara aktarılmasını sağlar. Bu rehberde CI/CD Nedir, Nasıl Kurulur? sorusunun teknik temellerini, iş akışı (pipeline) aşamalarını, kurumsal avantajlarını, popüler araçların kıyaslamasını, adım adım kurulum adımlarını ve kritik güvenlik standartlarını tüm boyutlarıyla inceleyeceğiz.

CI/CD (Sürekli Entegrasyon ve Sürekli Dağıtım) Nedir?

Sürekli entegrasyon ve sürekli dağıtım konseptini temsil eden modern teknolojik illüstrasyon
CI/CD, kod yazımından canlıya çıkışa kadar olan tüm süreçleri otomatize eder.

Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD), modern yazılım mühendisliğinde kodun geliştirilmesinden son kullanıcıya ulaştırılmasına kadar olan tüm adımları otomatikleştiren birleşik bir metodolojidir. Geleneksel yazılım geliştirme yaklaşımlarında haftalarca veya aylarca izole dallarda (branch) geliştirilen kodlar, canlıya alınma aşamasında birleştirilmeye çalışıldığında ciddi çakışmalar (merge conflict) ve beklenmeyen sistem hataları meydana gelirdi. CI/CD yaklaşımı, geliştiricilerin yazdıkları kod parçalarını günde birden çok kez merkezi bir depoya (repository) göndermesini ve bu kodların anında otomatikleştirilmiş denetimlerden geçirilmesini temel alır.

Yazılım geliştirme yaşam döngüsü (SDLC) içinde CI/CD, hata geri bildirim döngüsünü dakikalar seviyesine indirir. Bir yazılımcı kaynak kod üzerinde değişiklik yapıp versiyon kontrol sistemine (VCS) gönderdiği anda, arka planda yapılandırma betikleri devreye girer. Bu betikler kodun derlenmesini (build), birim (unit) ve entegrasyon testlerinin çalıştırılmasını ve statik kod analizi araçlarıyla güvenlik açıklarının taranmasını sağlar. Böylece yazılımın kırılgan noktaları henüz geliştirme aşamasındayken izole edilerek çözüme kavuşturulur.

Kurumsal organizasyonlar için CI/CD yalnızca teknik bir araç seti değil, aynı zamanda operasyonel riskleri minimize eden stratejik bir kalite güvence mekanizmasıdır. Mikroservis mimarilerinin ve dağıtık sistemlerin yaygınlaşmasıyla birlikte yüzlerce bağımsız servisin senkronize çalışması zorunlu hale gelmiştir. CI/CD mekanizmaları, her bir servisin bağımsız olarak inşa edilmesini, doğrulanmasını ve kesintisiz şekilde dağıtılmasını mümkün kılarak ekipler arası bağımlılık darboğazlarını ortadan kaldırır.

Sürekli Entegrasyon (Continuous Integration - CI) Yaklaşımı

Sürekli Entegrasyon (CI), yazılım geliştiricilerin kod tabanındaki değişiklikleri merkezi bir Git deposuna sık aralıklarla entegre etme disiplinidir. Bu yaklaşımın temel amacı, "entegrasyon cehennemi" olarak adlandırılan ve uzun süre ayrı geliştirilen kodların birleştirilmesi sırasında ortaya çıkan karmaşık çakışmaları engellemektir. CI felsefesinde her geliştirici küçük parçalar halinde çalışır ve yaptığı her taahhüt (commit) merkezi depoya gönderildiğinde otomatik bir yapı (build) ve test mekanizmasını tetikler.

CI süreci üç temel prensip üzerine kuruludur: merkezi bir kaynak kod deposu, otomatik derleme mekanizması ve kapsamlı test otomasyonu. Geliştirici kodunu gönderdiğinde CI sunucusu en güncel kaynak kodu çeker, bağımlılıkları yükler ve projeyi sıfırdan derler. Derleme aşamasının ardından birim testleri (unit tests) ve bileşen testleri çalıştırılır. Bu testlerden herhangi biri başarısız olursa, CI sistemi derlemeyi anında durdurur ve ilgili geliştiriciye bildirim gönderir. Bu sayede ana kod tabanı (main/master branch) her an derlenebilir ve kararlı bir durumda tutulur.

Sürekli Teslimat (Delivery) ve Sürekli Dağıtım (Deployment - CD) Arasındaki Kritik Farklar

Sürekli Teslimat (Continuous Delivery) ve Sürekli Dağıtım (Continuous Deployment) terimleri sıklıkla birbirinin yerine kullanılsa da aralarında kritik bir operasyonel fark bulunur. Her iki yaklaşım da kodun test ortamlarından geçerek dağıtıma hazır hale getirilmesini hedefler; ancak canlı (production) ortama geçiş kararının uygulanış biçimi farklılık gösterir.

Sürekli Teslimat (CDel), test süreçlerini başarıyla geçen kodun her an canlıya alınabilecek durumda paketlenmesini ve otomatik olarak hazırlık (staging) veya test sunucularına kurulmasını kapsar. Canlı ortama dağıtım adımı ise iş birimlerinin veya ürün yöneticilerinin manuel onayına bırakılır. Bu model, mevzuata tabi sektörlerde (finans, sağlık vb.) ya da belirli sürüm takvimlerine uymak zorunda olan işletmelerde tercih edilir.

Sürekli Dağıtım (CDepl) ise bu onay mekanizmasını tamamen ortadan kaldırır. Geliştiricinin yazdığı kod tüm CI ve test aşamalarından yeşil ışık alarak geçtiği takdirde, insan müdahalesi olmaksızın otomatik olarak doğrudan canlı ortama (production) aktarılır. Bu yaklaşım, son derece yüksek test kapsamı (test coverage), güçlü gözlemlenebilirlik (observability) ve otomatik geri alma (rollback) yeteneklerine sahip olgun mühendislik ekipleri tarafından uygulanır.

Özellik / AşamaSürekli Entegrasyon (CI)Sürekli Teslimat (Continuous Delivery)Sürekli Dağıtım (Continuous Deployment)
Ana OdakKod birleştirme, derleme ve otomatik testlerDağıtıma hazır paket üretme ve test ortamlarına kurulumCanlı ortama uçtan uca otomatik dağıtım
Tetiklenme BiçimiHer Git push / Pull Request işlemiCI başarıyla tamamlandığında otomatikCI ve Staging testleri başarıyla bitince otomatik
Canlıya Geçiş OnayıKapsam dışıManuel onay mekanizması gerektirirTamamen otomatiktir, insan onayı gerektirmez
Ortam KapsamıBuild sunucuları / İzole runner'larStaging, UAT, Pre-prod ortamlarıProduction (Canlı) ortamlar
Test KapsamıUnit, Linter, Statik Kod AnaliziEntegrasyon, E2E, Performans testleriCanary analizleri, Otomatik Healthcheck

Ana Odak

Sürekli Entegrasyon (CI)

Kod birleştirme, derleme ve otomatik testler

Sürekli Teslimat (Continuous Delivery)

Dağıtıma hazır paket üretme ve test ortamlarına kurulum

Sürekli Dağıtım (Continuous Deployment)

Canlı ortama uçtan uca otomatik dağıtım

Tetiklenme Biçimi

Sürekli Entegrasyon (CI)

Her Git push / Pull Request işlemi

Sürekli Teslimat (Continuous Delivery)

CI başarıyla tamamlandığında otomatik

Sürekli Dağıtım (Continuous Deployment)

CI ve Staging testleri başarıyla bitince otomatik

Canlıya Geçiş Onayı

Sürekli Entegrasyon (CI)

Kapsam dışı

Sürekli Teslimat (Continuous Delivery)

Manuel onay mekanizması gerektirir

Sürekli Dağıtım (Continuous Deployment)

Tamamen otomatiktir, insan onayı gerektirmez

Ortam Kapsamı

Sürekli Entegrasyon (CI)

Build sunucuları / İzole runner'lar

Sürekli Teslimat (Continuous Delivery)

Staging, UAT, Pre-prod ortamları

Sürekli Dağıtım (Continuous Deployment)

Production (Canlı) ortamlar

Test Kapsamı

Sürekli Entegrasyon (CI)

Unit, Linter, Statik Kod Analizi

Sürekli Teslimat (Continuous Delivery)

Entegrasyon, E2E, Performans testleri

Sürekli Dağıtım (Continuous Deployment)

Canary analizleri, Otomatik Healthcheck

DevOps Kültüründe CI/CD'nin Stratejik Yeri

DevOps, yazılım geliştirme (Development) ile sistem operasyonları (Operations) ekipleri arasındaki siloları yıkarak iş birliğini, hızı ve kaliteyi artırmayı amaçlayan bir kurumsal kültür ve pratikler bütünüdür. CI/CD ise bu kültürel dönüşümün teknik taşıyıcı omurgasını oluşturur. DevOps felsefesinin temelinde yer alan "hızlı geri bildirim" ve "sürekli iyileştirme" ilkeleri, CI/CD hatları olmaksızın ölçeklenemez.

Geleneksel yapılarda geliştiriciler kodu yazıp operasyon ekibine teslim ederken, operasyon ekibi sistemin kararlılığını korumak için değişiklikleri mümkün olduğunca yavaş ve kontrollü yapmaya çalışırdı. Bu zıtlık, kurumsal çevikliği engellerdi. CI/CD sayesinde kod yazıldığı andan itibaren operasyonel gereksinimler (konfigürasyon yönetimi, altyapı otomasyonu, izleme) kod olarak tanımlanır (Infrastructure as Code - IaC). Böylece her iki ekip ortak bir otomasyon platformunda buluşarak sorumluluğu paylaşır.

CI/CD Pipeline (İş Akışı) Nasıl Çalışır?

Kaynak koddan canlı ortama uzanan otomatik CI/CD iş akışı hattı illüstrasyonu
Pipeline aşamaları; derleme, test, güvenlik taraması ve dağıtım adımlarını sıralı yönetir.

CI/CD Pipeline (İş Akışı Hattı), kaynak kodun depoya girdiği andan kullanıcıya ulaştığı ana kadar izlediği adımların kodlanmış ve otomatikleştirilmiş dizisidir. Bu hat, yazılımın kalite ve güvenlik kapılarından geçmesini sağlayan bir üretim bandı gibi çalışır. Bir pipeline genellikle versiyon kontrol sistemindeki bir hareketle (commit, pull request, merge veya release tag oluşturma) tetiklenir.

Pipeline çalışmaya başladığında, önceden tanımlanmış iş parçacıkları (jobs) izole ortamlarda (genellikle Docker konteynerleri veya sanal makineler) çalıştırılır. Her iş parçacığı bir önceki adımın başarılı olmasına bağlıdır. Eğer derleme veya test aşamalarından herhangi biri hata verirse, pipeline derhal "Kırmızı" (Failed) durumuna geçer, sonraki aşamalar iptal edilir ve geliştirici ekibe log kayıtlarıyla birlikte bildirim iletilir. Bu sayede hatalı bir kodun üretim ortamına ulaşması matematiksel olarak engellenir.

Yazılım Yaşam Döngüsündeki Temel Aşamalar (Build, Test, Release, Deploy)

Bir CI/CD hattı tipik olarak dört ana aşamadan (stage) meydana gelir. Her aşamanın kendine ait sorumlulukları, çıktıları ve başarı kriterleri bulunur:

  1. Kaynak Kod ve Derleme (Source & Build): Pipeline'ın ilk adımıdır. Versiyon kontrol sisteminden en güncel kaynak kod çekilir. Gerekli kütüphaneler ve bağımlılıklar (npm, maven, pip, nuget vb.) indirilir. Kod derlenerek ikili dosyalara (binary), yürütülebilir paketlere veya bir Docker imajına dönüştürülür. Bu aşama sözdizimi (syntax) hatalarını ve eksik bağımlılıkları anında yakalar.

  2. Otomatik Test (Test): Oluşturulan derleme paketi üzerinde çok katmanlı test senaryoları koşulur. Birim testler (Unit Tests) fonksiyonların mantıksal doğruluğunu denetlerken, entegrasyon testleri veritabanı ve harici servis bağlantılarını sınar. Aynı zamanda kod kapsama (code coverage) oranları ölçülür.

  3. Sürümleme ve Paketleme (Release / Package): Testleri başarıyla tamamlayan yapılar (artifacts), sürümleme standartlarına (Semantic Versioning: v1.2.0 gibi) uygun şekilde etiketlenir. Üretilen Docker imajları veya derleme paketleri merkezi bir imaj deposuna (Docker Hub, AWS ECR, Nexus, Artifactory) güvenli bir şekilde yüklenir.

  4. Dağıtım (Deploy): Paketlenen sürüm, hedef altyapıya aktarılır. Bu adım genellikle aşamalı olarak işletilir: önce Geliştirme (Dev), ardından Kabul/Test (Staging/UAT) ve son olarak Canlı (Production) sunuculara veya Kubernetes kümelerine dağıtılır.

Kod Hatalarının Erken Tespiti ve Otomatize Edilmiş Testlerin Rolü

Yazılım mühendisliğinde "Shift-Left" (Sola Kaydırma) prensibi, test ve güvenlik süreçlerinin yaşam döngüsünün en erken aşamalarına çekilmesini ifade eder. Bir hatanın geliştirme aşamasında tespit edilip düzeltilmesinin maliyeti ile canlı ortamda ortaya çıktıktan sonra düzeltilmesinin maliyeti arasında onlarca kat fark vardır. CI/CD hatları, Shift-Left prensibinin en etkili uygulama alanıdır.

Otomatize edilmiş test piramidi; birim testler, entegrasyon testleri ve uçtan uca (E2E) testlerden oluşur. CI hattında bu testlerin paralel olarak çalıştırılması, geliştiricilere saniyeler içinde geri bildirim sağlar. Örneğin, bir API uç noktasındaki parametre değişikliğinin veritabanı katmanında oluşturacağı bir uyumsuzluk, henüz geliştirici kendi çalışma ortamından ayrılmadan yakalanır. Bu durum hem yazılım kalitesini garanti altına alır hem de regresyon (eski özelliklerin bozulması) riskini sıfıra yaklaştırır.

Kurumsal Ölçekte CI/CD Kullanmanın Avantajları

Kurumsal ölçekte yazılım geliştiren organizasyonlar için CI/CD hatları, doğrudan iş çıktılarına yansıyan operasyonel ve finansal kazanımlar sağlar. Süreçlerin standartlaştırılması, insan hatasına bağlı operasyonel kesintileri ortadan kaldırırken ekiplerin inovasyona odaklanmasına olanak tanır.

Manuel Hata Oranlarının Düşürülmesi ve Operasyonel Verimlilik

Geleneksel dağıtım modellerinde bir yazılımın sunucuya yüklenmesi; SSH ile sunucuya bağlanma, komut dosyalarını manuel çalıştırma, konfigürasyon dosyalarını elle düzenleme ve servisleri yeniden başlatma gibi onlarca adımdan oluşurdu. Bu manuel adımlar, özellikle stresli canlıya geçiş gecelerinde harf hatalarına, eksik dosya transferlerine ve yanlış ortam değişkeni yapılandırmalarına yol açardı.

CI/CD, tüm dağıtım sürecini kod olarak tanımlanmış, tekrarlanabilir ve denetlenebilir bir standart haline getirir. Her dağıtım adımı aynı kurallar çerçevesinde işletilir. Bu sayede "benim bilgisayarımda çalışıyordu ama sunucuda çalışmıyor" problemi tamamen tarihe karışır. Sistem yöneticileri ve DevOps mühendisleri rutin dağıtım işleriyle vakit kaybetmek yerine, altyapı performansını ve güvenliğini optimize etmeye odaklanır.

Pazara Çıkış Süresinin (Time-to-Market) Optimize Edilmesi

Günümüz dijital pazarında rekabet avantajı sağlamanın en önemli unsuru, bir özelliği veya hata düzeltmesini son kullanıcıya ne kadar hızlı ulaştırabildiğinizdir. CI/CD hattına sahip olmayan organizasyonlar, sürüm süreçlerinin getirdiği riskler nedeniyle ayda bir veya çeyrekte bir sürüm çıkabilirken; olgun CI/CD süreçlerine sahip şirketler günde onlarca kez canlıya kesintisiz sürüm çıkabilmektedir.

Küçük ve sık sürümler (micro-releases) çıkarmak, hem risk yönetimini kolaylaştırır hem de pazarın taleplerine anında yanıt verilmesini sağlar. Kullanıcı geri bildirimleri doğrultusunda geliştirilen bir özellik, saatler içinde test edilip canlıya alınabilir. Bu çeviklik, işletmelerin yeni gelir fırsatlarını hızla yakalamasına ve müşteri memnuniyetini en üst düzeyde tutmasına katkı sağlar.

Geliştirici Deneyiminin (Developer Experience) İyileştirilmesi

Bir yazılım ekibinin verimliliği, geliştiricilerin ne kadar süreyle doğrudan kod yazabildiği ve ürettikleri değerin ne kadar hızlı sisteme aktarıldığıyla doğrudan ilişkilidir. Manuel testlerin ve karmaşık dağıtım süreçlerinin olduğu ortamlarda yazılımcılar zamanlarının önemli bir kısmını bürokratik onay süreçlerinde ve dağıtım kaynaklı hataları ayıklamakta harcarlar.

CI/CD, geliştiricilere güvenli bir çalışma ortamı sağlar. Geliştirici, yazdığı kodun sistemi bozmayacağını çünkü kapsamlı test ve güvenlik hatlarından geçeceğini bilir. Bu psikolojik güvenlik ve otonomi, geliştirici tükenmişliğini (burnout) azaltır, mühendislik ekibinin moralini yükseltir ve kurum içi yetenek tutundurma oranlarını artırır.

Sektörde Öne Çıkan CI/CD Araçları ve Karşılaştırmaları

CI/CD ekosisteminde her biri farklı mimari ihtiyaçlara, bütçelere ve kurumsal politikalara hitap eden çok sayıda araç bulunmaktadır. Doğru aracı seçmek, projenin ölçeği, ekibin yetkinliği ve altyapının barındırıldığı ortama (on-premise veya cloud) bağlıdır.

Jenkins: Esneklik ve Geniş Eklenti Ekosistemi

Jenkins, açık kaynaklı CI/CD dünyasının en köklü ve en yaygın kullanılan araçlarından biridir. Java tabanlı olan Jenkins, binlerce ücretsiz eklenti (plugin) desteği sayesinde akla gelebilecek neredeyse tüm teknolojilerle, versiyon kontrol sistemleriyle ve bulut sağlayıcılarıyla entegre olabilir.

Jenkins'in en büyük avantajı sunduğu sınırsız özelleştirme ve kontrol yeteneğidir. Şirket içi (on-premise) sunucularda tamamen ücretsiz olarak barındırılabilir. Ancak bu esneklik beraberinde ciddi bir bakım maliyeti getirir. Eklentilerin güncelliğini korumak, güvenlik açıklarını yönetmek ve Jenkins ana sunucusunu (master-agent mimarisi) ölçeklendirmek deneyimli bir sistem yönetimi eforu gerektirir.

GitLab CI/CD ve GitHub Actions: Bütünleşik Çözümler

Son yıllarda sektör, bağımsız CI/CD sunucuları kurmak yerine kod deposuyla bütünleşik çalışan platformlara doğru kaymıştır. Bu alanda iki lider öne çıkmaktadır:

  • GitHub Actions: GitHub deposu içinde doğrudan .github/workflows/ dizininde tanımlanan YAML dosyalarıyla çalışır. Geniş GitHub Marketplace ekosistemi sayesinde topluluk tarafından geliştirilmiş binlerce hazır iş adımını (action) projelere dahil etmek son derece kolaydır. Hem bulut tabanlı (GitHub-hosted runners) hem de şirket içi sunucularda (self-hosted runners) çalıştırılabilir.

  • GitLab CI/CD: GitLab platformunun çekirdeğine gömülü olan bu araç, .gitlab-ci.yml dosyası üzerinden yönetilir. Güçlü pipeline görselleştirmesi, yerleşik konteyner kayıt defteri (container registry), Auto DevOps yetenekleri ve gelişmiş güvenlik tarama modülleriyle uçtan uca eksiksiz bir DevOps platformu sunar.

Kurumsal İhtiyaçlara Göre Araç Seçim Kriterleri

Doğru CI/CD aracını belirlerken işletmelerin şu dört temel kriteri değerlendirmesi gerekir:

  1. Barındırma Modeli (Hosting): Veri gizliliği ve mevzuat gereği kod tabanınızı kurum içi sunucularda tutmanız gerekiyorsa Jenkins veya Self-Hosted GitLab doğru tercihtir. Bakım eforunu sıfıra indirmek istiyorsanız GitHub Actions, CircleCI veya SaaS GitLab tercih edilmelidir.

  2. Ölçeklenebilirlik ve Maliyet: Pipeline'ların yoğun çalıştığı ekiplerde eşzamanlı (concurrent) build kapasitesi ve dakika başına ücretlendirme modelleri maliyetleri doğrudan etkiler.

  3. Ekip Yetkinliği: YAML tabanlı konfigürasyonlar (GitHub Actions, GitLab) modern ekipler için hızlı öğrenme eğrisi sunarken, Groovy tabanlı Jenkinsfile yapılandırmaları daha derin bir teknik uzmanlık gerektirir.

  4. Ekosistem Uyumu: Kullandığınız bulut sağlayıcısı (AWS, Azure, GCP) veya proje yönetim araçlarıyla yerleşik entegrasyon kabiliyeti iş akışlarını önemli ölçüde hızlandırır.

Kriter / ÖzellikJenkinsGitHub ActionsGitLab CI/CDCircleCI
Lisans / ModelAçık Kaynak (Self-Hosted)SaaS / Self-Hosted RunnerSaaS / Self-HostedSaaS / Private Cloud
Konfigürasyon DiliGroovy (Jenkinsfile)YAMLYAMLYAML
Kurulum & Bakım EforuYüksek (Sunucu, Plugin yönetimi)Çok Düşük (SaaS)Düşük / OrtaÇok Düşük (SaaS)
Eklenti / Entegrasyon1800+ EklentiGeniş MarketplaceDahili Özellikler / GenişOrbs Ekosistemi
Güvenlik & Secret YönetimiEklentilere bağlıDahili GitHub Secrets & OIDCDahili Vault & CI VariablesDahili Contexts & Secret
İdeal Kullanım SenaryosuÖzel on-premise altyapılarGitHub odaklı modern projelerUçtan uca tek platform arayanlarHızlı bulut derlemeleri isteyenler

Lisans / Model

Jenkins

Açık Kaynak (Self-Hosted)

GitHub Actions

SaaS / Self-Hosted Runner

GitLab CI/CD

SaaS / Self-Hosted

CircleCI

SaaS / Private Cloud

Konfigürasyon Dili

Jenkins

Groovy (Jenkinsfile)

GitHub Actions

YAML

GitLab CI/CD

YAML

CircleCI

YAML

Kurulum & Bakım Eforu

Jenkins

Yüksek (Sunucu, Plugin yönetimi)

GitHub Actions

Çok Düşük (SaaS)

GitLab CI/CD

Düşük / Orta

CircleCI

Çok Düşük (SaaS)

Eklenti / Entegrasyon

Jenkins

1800+ Eklenti

GitHub Actions

Geniş Marketplace

GitLab CI/CD

Dahili Özellikler / Geniş

CircleCI

Orbs Ekosistemi

Güvenlik & Secret Yönetimi

Jenkins

Eklentilere bağlı

GitHub Actions

Dahili GitHub Secrets & OIDC

GitLab CI/CD

Dahili Vault & CI Variables

CircleCI

Dahili Contexts & Secret

İdeal Kullanım Senaryosu

Jenkins

Özel on-premise altyapılar

GitHub Actions

GitHub odaklı modern projeler

GitLab CI/CD

Uçtan uca tek platform arayanlar

CircleCI

Hızlı bulut derlemeleri isteyenler

Adım Adım CI/CD Pipeline Kurulumu (Nasıl Kurulur?)

Adım adım CI/CD hattı kurulum aşamalarını simgeleyen kurumsal teknik çizim
Kurulum; versiyon kontrolünden başlayarak test, güvenlik ve dağıtım adımlarını kapsar.

Başarılı bir CI/CD hattı kurmak, yalnızca bir YAML dosyası yazmaktan ibaret değildir; altyapı hazırlığı, test stratejisi, kalite kontrol kapıları ve güvenli dağıtım mekanizmalarının adım adım planlanmasını gerektirir.

SÜREÇ ADIMLARI

CI/CD Kurulum Adımları

Bir projede sıfırdan CI/CD hattı devreye alırken izlenmesi gereken sıra:

01

Versiyon Kontrol Sistemi ve Altyapının Hazırlanması

Kaynak kod deposunda dallanma stratejisini belirleyin ve pipeline çalıştırıcılarını (runners) yapılandırın.

02

Derleme ve Test Ortamlarının Konfigürasyonu

Derleme betiklerini yazın, otomatik birim testlerini entegre edin ve pipeline YAML dosyasını oluşturun.

03

Güvenlik ve Kalite Kapılarının Eklenmesi

Statik kod analizi (SAST) ve bağımlılık güvenlik tarama araçlarını test aşamasına dahil edin.

04

Canlı Ortama Güvenli Dağıtımın Sağlanması

Hedef sunuculara veya konteyner orkestrasyon ortamına Blue/Green veya Canary stratejisiyle dağıtımı tamamlayın.

Adım 1: Versiyon Kontrol Sistemi (VCS) ve Altyapı Hazırlığı

Kurulumun ilk adımı, projenin kaynak kod yönetimini standartlaştırmaktır. Ekibin Git kullanım stratejisi (GitFlow, GitHub Flow veya Trunk-Based Development) belirlenmelidir. Trunk-Based Development modeli, geliştiricilerin kısa ömürlü dallarda çalışıp sık sık ana dala (main) birleşmesini teşvik ettiği için CI/CD hatlarıyla en uyumlu yaklaşımdır.

Ardından pipeline görevlerini üstlenecek altyapı (Runner/Agent) tanımlanmalıdır. Bulut sağlayıcılarının sunduğu paylaşımlı çalıştırıcılar genel projeler için yeterliyken, şirket içi ağa erişim gerektiren veya yüksek işlem gücü isteyen projelerde Kubernetes üzerinde dinamik ölçeklenen özel çalıştırıcılar (self-hosted runners) kurulmalıdır.

Adım 2: Build ve Birim (Unit) Test Ortamlarının Konfigürasyonu

Bu aşamada projenin kök dizininde pipeline yapılandırma dosyası (örneğin GitHub Actions için @@CODE0@@) oluşturulur. Pipeline, depoya yapılan her @@CODE1@@ ve pull request olayında tetiklenecek şekilde yapılandırılır.

Aşağıda modern bir Node.js projesi için örnek bir GitHub Actions CI yapılandırması yer almaktadır:

name: CI Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    steps:
    - name: Kaynak Kodu Çek
      uses: actions/checkout@v4

    - name: Node.js Ortamını Hazırla
      uses: actions/setup-node@v4
      with:
        node-version: '20'
        cache: 'npm'

    - name: Bağımlılıkları Yükle
      run: npm ci

    - name: Kod Standartlarını Denetle (Linter)
      run: npm run lint

    - name: Birim Testleri Çalıştır
      run: npm test -- --coverage

Adım 3: Güvenlik ve Kod Kalitesi Tarama Adımlarının Entegrasyonu

Pipeline'a güvenlik ve kalite kapılarının (Quality Gates) eklenmesi, hatalı ve savunmasız kodların ilerlemesini engeller. Bu adımda iki temel araç türü entegre edilir:

  • Statik Kod Analizi (SAST): SonarQube gibi araçlar kod kalitesini, tekrar eden kod bloklarını, teknik borç oranını ve güvenlik açıklarını analiz eder. Belirlenen kalite eşiğini (örneğin test kapsamı <%80) geçemeyen kodların birleşmesi engellenir.

  • Bağımlılık Güvenlik Taraması (SCA): Snyk, Trivy veya OWASP Dependency-Check araçları, projede kullanılan harici kütüphanelerdeki bilinen güvenlik açıklarını (CVE) tespit eder.

Adım 4: Canlı (Production) Ortama Güvenli Dağıtım Stratejileri (Blue/Green, Canary)

Testleri ve güvenlik kontrollerini geçen kodun canlıya aktarılması aşamasında kesinti süresini (downtime) sıfıra indirmek ve riskleri yönetmek için modern dağıtım stratejileri kullanılır:

  • Blue/Green Dağıtım: Biri aktif (Blue), diğeri boşta (Green) olmak üzere iki özdeş canlı ortam bulunur. Yeni sürüm Green ortama kurulur ve test edilir. Her şey sorunsuz çalıştığında yük dengeleyici (load balancer) trafiği anında Green ortama yönlendirir. Bir sorun çıkarsa trafik saniyeler içinde tekrar Blue ortama çevrilebilir.

  • Canary Dağıtım: Yeni sürüm önce kullanıcıların küçük bir yüzdesine (örneğin %5) açılır. Sistemin hata oranları ve performans metrikleri izlenir. Herhangi bir anomali yoksa yeni sürüm kademeli olarak %25, %50 ve %100 oranında tüm kullanıcılara yayılır.

CI/CD Süreçlerinde Kurumsal Güvenlik: Riskler ve Alınması Gereken Önlemler

CI/CD sistemleri, kaynak koda, üretim sunucularına, veritabanı şifrelerine ve bulut altyapılarına doğrudan erişim yetkisine sahip olduğu için siber saldırganların birincil hedeflerinden biri haline gelmiştir. Yazılım tedarik zinciri saldırılarına (Software Supply Chain Attacks) karşı pipeline güvenliği en üst düzeyde tutulmalıdır.

DevSecOps: Pipeline İçerisine Güvenliği Dahil Etmek

DevSecOps yaklaşımı, güvenliğin yazılım geliştirme sürecinin en sonunda yapılan izole bir denetim olmaktan çıkarılıp, CI/CD hattının her aşamasına yerleştirilmesini öngörür. Güvenlik, geliştirme hızını yavaşlatan bir engel değil, sürecin doğal bir parçası olmalıdır.

Pipeline içine yerleştirilen DAST (Dinamik Uygulama Güvenlik Testi) araçları çalışan uygulama üzerinde SQL Injection, XSS gibi açıkları ararken; IAST (İnteraktif Uygulama Güvenlik Testi) araçları kod çalışırken güvenlik analizleri yapar. Ayrıca Docker imajlarının taranması (Container Scanning) sayesinde temel işletim sistemi katmanlarındaki açıklar henüz imaj depoya yüklenmeden engellenir.

Yanlış Konfigürasyon Riskleri ve Erişim Yetkilerinin (IAM) Sınırlandırılması

CI/CD sistemlerinde en sık karşılaşılan güvenlik zaafiyetlerinden biri, pipeline çalıştırıcılarına (runners) gereğinden fazla yetki verilmesidir. En Az Ayrıcalık İlkesi (Principle of Least Privilege - PoLP) doğrultusunda, bir dağıtım görevinin yalnızca hedef ortama dosya aktarabilecek kadar yetkisi olmalı; tüm bulut hesabını yönetebilecek yönetici (admin) rolleri kesinlikle atanmamalıdır.

Ayrıca, açık kaynaklı projelerde veya harici katkıcılara açık depolarda, kötü niyetli kişilerin açtığı Pull Request'ler aracılığıyla pipeline içinde yetkisiz komutlar çalıştırmasını engelleyen onay mekanizmaları (fork PR approval rules) zorunlu tutulmalıdır.

Hassas Verilerin (Secret Management) Güvenli Yönetimi

API anahtarları, veritabanı parolaları, SSH anahtarları ve sertifikalar kesinlikle kaynak kod içinde saklanmamalıdır (hardcoded secrets). Bu veriler sızdırıldığında telafisi imkansız güvenlik ihlalleri oluşur.

Kurumsal ortamlarda secret yönetimi için şu standartlar uygulanmalıdır:

  • Pipeline loglarında hassas verilerin otomatik olarak maskelenmesi (Secret Masking).

  • HashiCorp Vault, AWS Secrets Manager veya Azure Key Vault gibi merkezi gizli bilgi yönetim sistemlerinin entegre edilmesi.

  • Statik API anahtarları yerine, OpenID Connect (OIDC) kullanarak bulut sağlayıcılarıyla kısa ömürlü, geçici kimlik doğrulama belirteçleri (temporary tokens) üzerinden iletişim kurulması.

Sonuç: Hatasız ve Hızlı Sürüm Çıkmak İçin Sürdürülebilir CI/CD Stratejisi

Modern kurumsal yazılım ekosisteminde CI/CD hatları bir lüks değil, rekabet gücünü korumanın ve kaliteli yazılım üretmenin vazgeçilmez standardıdır. Manuel süreçlerden tam otomasyona geçiş; ekiplerin hata ayıklama yerine değer üretmeye odaklanmasını, operasyonel maliyetlerin düşmesini ve yazılım güvenilirliğinin en üst seviyeye taşınmasını sağlar.

Başarılı bir CI/CD stratejisi teknik araçların ötesinde bir kültür değişimidir. Geliştiricilerin küçük taahhütlerle çalışması, test otomasyonuna yatırım yapılması, güvenlik denetimlerinin sürecin içine gömülmesi (DevSecOps) ve gözlemlenebilirlik araçlarıyla hatların sürekli izlenmesi bu yapının sürdürülebilirliğini garanti eder. Doğru kurgulanan bir otomasyon omurgası, organizasyonların dijital ürünlerini güvenle ve hızla ölçeklendirmesinin en güçlü teminatıdır.

Sıkça Sorulan Sorular

CI/CD nedir ve en temel amacı nedir?

CI/CD, yazılım geliştirme aşamalarındaki derleme, test ve canlıya dağıtım süreçlerini otomatikleştiren bir yöntemdir. Temel amacı, insan hatasını ortadan kaldırarak yazılım güncellemelerini daha hızlı, güvenli ve sorunsuz biçimde kullanıcılara ulaştırmaktır.

Sürekli Teslimat (Delivery) ile Sürekli Dağıtım (Deployment) arasındaki fark nedir?

Sürekli Teslimat aşamasında kod testleri geçip canlıya hazır hale getirilir ancak yayına alma işlemi için manuel bir insan onayı gerekir. Sürekli Dağıtımda ise tüm testleri başarıyla geçen kod, hiçbir insan müdahalesi olmadan otomatik olarak doğrudan canlı ortama aktarılır.

Bir CI/CD pipeline'ı hangi temel adımlardan oluşur?

Tipik bir CI/CD pipeline'ı; kaynak kodun çekilmesi (Source), kodun derlenmesi (Build), otomatik testlerin koşulması (Test), güvenlik ve kod kalitesi taramaları (Security Scan), sürümlenen paketin oluşturulması (Release) ve hedef sunuculara yüklenmesi (Deploy) adımlarından oluşur.

En popüler CI/CD araçları hangileridir?

Sektörde en yaygın kullanılan araçlar arasında açık kaynaklı ve kurum içi sunucularda çalışan Jenkins; kod depolarıyla doğrudan bütünleşik olan GitHub Actions ve GitLab CI/CD; bulut odaklı çözümler sunan CircleCI ve Travis CI yer almaktadır.

CI/CD süreçlerinde DevSecOps ne anlama gelir?

DevSecOps, siber güvenlik kontrollerinin yazılım yaşam döngüsünün en sonuna bırakılmak yerine CI/CD pipeline'ının her aşamasına dahil edilmesidir. Statik kod analizi (SAST), dinamik testler (DAST) ve açık kaynak bağımlılık taramaları bu kapsamda otomatik işletilir.

Sıfır kesinti (Zero-Downtime) ile dağıtım nasıl sağlanır?

Sıfır kesintili dağıtım için Blue/Green veya Canary dağıtım stratejileri kullanılır. Yeni sürüm izole bir ortamda ayağa kaldırılıp test edildikten sonra ağ trafiği yük dengeleyiciler üzerinden anlık olarak yeni sürüme yönlendirilir, böylece kullanıcılar herhangi bir hizmet kesintisi yaşamaz.

Küçük ölçekli ekipler veya tek kişilik projeler için CI/CD gerekli midir?

Evet, küçük ekiplerde de kod kalitesini korumak, manuel sunucu yükleme eforunu ortadan kaldırmak ve ileride oluşabilecek teknik borçları engellemek için hafif bir CI/CD hattı (örneğin temel bir GitHub Actions iş akışı) kurmak büyük operasyonel verimlilik sağlar.

Pipeline içinde API anahtarları ve veritabanı şifreleri nasıl korunmalıdır?

Hassas veriler kesinlikle kaynak kod içine yazılmamalıdır. Bunun yerine CI/CD platformlarının şifreli Secret Manager alanlarında tutulmalı, log ekranlarında maskelenmeli ve mümkünse bulut sağlayıcılarıyla OIDC üzerinden geçici yetkilendirme belirteçleri kullanılmalıdır.

Son Adım

Dijital projenizi bugün planlayalım

Web, yazılım, e-ticaret, mobil uygulama, entegrasyon, SEO veya GEO ihtiyacınızı net bir kapsama dönüştürelim.

CI/CD Nedir, Nasıl Kurulur? | Webizm