CI/CD Temelleri: Basit Pipeline ile Dağıtımı Otomatikleştirme
Yazılım Geliştirme Süreçleri
CI/CD Temelleri: Basit Pipeline ile Dağıtımı Otomatikleştirme

CI/CD nedir ve neden önemlidir?
Sürekli Entegrasyon (CI) ve Sürekli Dağıtım/Sürekli Teslim (CD), yazılım geliştirme süreçlerinde tekrarlayan adımları otomatikleştirerek hataları erken yakalamayı ve kodu daha güvenilir biçimde dağıtmayı amaçlar. Temel hedefler; sık entegre edilen kod, otomatik çalışan testler ve elle müdahaleyi azaltan dağıtım süreçleri oluşturmaktır. Bu kavramların pratik uygulamaları ve terminolojisi hakkında resmi GitLab dokümantasyonu iyi bir başlangıç noktasıdır: https://docs.gitlab.com/ci/.
CI/CD’nin temel bileşenleri
- Kod deposu: Versiyon kontrolü (ör. Git) ile kaynak kodun merkezi yönetimi.
- Pipeline: Bir veya daha fazla aşamadan (stages) oluşan otomatik iş akışı — örneğin build, test, deploy.
- Runner/Agent: İşleri çalıştıran makineler veya servisler (self-hosted runner veya bulut runner).
- Jobs: Pipeline içindeki bağımsız görevler; paralel veya ardışık çalıştırılabilir.
- Artifacts ve cache: Build çıktıları veya önbelleklenen bağımlılıklar ki sonraki adımlarda yeniden kullanılır.
- Ortama özel yapılandırma: Gizli anahtarlar, ortam değişkenleri, konfigürasyonlar.
GitLab’in adım adım rehberi, pipeline yapı taşlarını ve örnek kullanımını açıklar: https://docs.gitlab.com/ci/quick_start/.
Basit bir pipeline nasıl çalışır? (Kısa akış)
- Geliştirici kodu repoya gönderir (push veya merge request).
- Repository’deki CI yapılandırması (ör. .gitlab-ci.yml veya .github/workflows/*.yml) tetiklenir.
- Runner ilgili işleri alır; sırasıyla build, test ve deploy aşamalarını çalıştırır.
- Başarılı işlerin artifact’leri saklanır; başarısız işler bildirim tetikler.
- CD varsa uygun koşullar gerçekleştiğinde otomatik veya onaylı dağıtım yapılır.
Hızlı başlangıç: Adım adım uygulama rehberi
Aşağıdaki adımlar küçük bir projede CI/CD’yi çalışır hale getirmek için temel bir akış sunar. Örnekler GitLab ve GitHub Actions tabanlıdır; her iki aracın dökümantasyonu farklı detaylar içerir, bu yüzden resmi rehbere bakmak faydalıdır (GitLab: https://docs.gitlab.com/ci/, GitHub Actions örnekleri için ek kaynaklar: https://www.softwexa.com/tr/blog/cicd-pipeline-github-actions-complete-guide).
Gereksinimler
- Bir Git repository (GitLab veya GitHub).
- Projeniz için çalışma komutları (ör. build, test, deploy).
- Runner veya GitHub Actions için erişim (genelde servis hazır).
Adım 1 — Depoyu hazırla
Proje köküne CI yapılandırma dosyasını ekleyin: GitLab için .gitlab-ci.yml, GitHub için .github/workflows/ci.yml. Bu dosya pipeline’ın hangi aşamalardan oluşacağını ve her işin nasıl çalışacağını tanımlar.
Adım 2 — Basit GitLab CI örneği
Aşağıda Node.js tabanlı basit bir örnek pipeline göreceksiniz. Bu örnek öğreticidir; kendi projene göre değiştirin.
stages:
- build
- test
- deploy
build_job:
stage: build
image: node:18
script:
- npm install
- npm run build
artifacts:
paths:
- dist/
test_job:
stage: test
image: node:18
script:
- npm test
deploy_job:
stage: deploy
image: alpine:latest
script:
- echo "Deploy: kendi dağıtım komutlarınızı buraya ekleyin"
when: manual
Bu yapı: önce bağımlılıkları ve build adımını çalıştırır, ardından testleri yürütür; deploy adımı elle tetikleme (manual) şeklinde bırakılarak üretime kontrolsüz push’ların doğrudan dağıtılmasının önüne geçer. Daha fazla yapılandırma için GitLab dokümanlarına bakabilirsiniz: https://docs.gitlab.com/ci/quick_start/.
Adım 3 — Basit GitHub Actions örneği
Benzer mantık GitHub Actions için aşağıdaki gibi uygulanır:
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm install
- run: npm run build
test:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm test
deploy:
runs-on: ubuntu-latest
needs: test
steps:
- run: echo "Deploy adımlarınızı buraya ekleyin"
Pratik ipuçları ve en iyi uygulamalar
- Küçük, bağımsız işler: Her job tek bir sorumluluk taşısın; böylece hata ayıklama kolaylaşır.
- Hız: Uzun süren pipeline’lar üretkenliği düşürür. Testleri paralelleştir, cache kullan ve gereksiz adımları kaldır.
- Gizli anahtar yönetimi: API anahtarları ve şifreler repo içinde plaintext olarak bulunmamalı; platformun secret/variable mekanizmaları kullanılmalı.
- Fail fast: Kritik testler erken koşulsun; böylece kaynaklar boşa harcanmaz.
- Ortama özel kontrollü dağıtım: Prodüksiyon için manuel onay veya koruma (protected branches) uygula.
Bu uygulamalar ve kavramların nasıl kullanılacağı hakkında daha fazla örnek ve rehber için GitLab dökümantasyonu faydalıdır: https://docs.gitlab.com/ci/.
Kontrol listesi: Pipeline yayına almadan önce
- Temel build ve test adımları pipeline’da çalışıyor mu?
- Gizli anahtarlar ortam değişkenleri ile güvenli şekilde tanımlandı mı?
- Deploy adımları için onay/koruma mekanizması var mı?
- Pipeline süresi makul seviyede mi (gerekirse paralelleştir veya cache ekle)?
- Rollback veya eski sürüme dönme stratejisi belirlendi mi?
Yaygın hatalar ve çözüm önerileri
- Uzun pipeline süreleri: Testleri gözden geçir, sadece gerekli testleri CI’ye ekle veya testleri paralel çalıştır.
- Gizli bilgilerin repo içinde olması: Derhal secrets mekanizmasına taşı ve geçmiş commitlerde varsa temizleme/rotate planı uygulayın.
- Flaky testler: İstikrarlı olmayan testleri izole et; test güvenilirliğini artırmadan deploy otomasyonunu genişletmeyin.
Sonuç ve sonraki adımlar
CI/CD, yazılım geliştirme süreçlerini daha hızlı ve güvenilir hale getirmek için güçlü bir yaklaşımdır. Bu yazıda temel kavramları, basit pipeline örneklerini ve pratik önerileri sunduk. Gerçek dünya projelerinde ayrıntılar uygulamaya göre değişir; daha fazla özelleştirme ve ileri seviye özellikler için resmi rehberleri inceleyin: GitLab CI dökümantasyonu (https://docs.gitlab.com/ci/) ve GitHub Actions rehberleri (örnek kılavuz: https://www.softwexa.com/tr/blog/cicd-pipeline-github-actions-complete-guide).
Sınırlamalar ve güvenilirlik notu
Bu rehber giriş düzeyindedir ve örnekler öğretici amaçlıdır. Üretim ortamı için güvenlik, ölçeklenebilirlik ve platforma özel ayarlar gibi konularda resmi dökümantasyon ve kuruluşunuzun güvenlik politikaları ile ilerlemeniz önerilir. Ana kavramlar ve pipeline yapısı hakkında daha detaylı bilgi için kaynaklara bakabilirsiniz: https://docs.gitlab.com/ci/, https://docs.gitlab.com/ci/quick_start/, https://www.softwexa.com/tr/blog/cicd-pipeline-github-actions-complete-guide.
Sıkça Sorulan Sorular (SSS)
CI ve CD arasındaki fark nedir?
CI (Sürekli Entegrasyon) kod değişikliklerinin sık sık entegre edilip otomatik testlerle doğrulanmasıdır. CD (Sürekli Dağıtım veya Sürekli Teslim) ise bu doğrulanmış değişikliklerin otomatik olarak test/üretim ortamlarına dağıtılmasını kapsar; dağıtım otomasyonu farklı kurallara göre yapılandırılabilir.
Hangi projeler için CI/CD uygundur?
Küçük ya da büyük fark etmeksizin, sık güncellenen ve test edilebilir projeler CI/CD’den fayda sağlar. İçeriğe bağlı olarak basit pipeline’lar bile hataları erken yakalamada etkili olur.
Pipeline’ı hızlı tutmak için ne yapmalıyım?
Testleri paralelleştirin, cache kullanın (bağımlılıkları tekrardan indirmemek için), gereksiz adımları kaldırın ve yalnızca gerekli testleri CI’de çalıştırın.
Üretime otomatik deploy güvenli midir?
Otomatik deploy güvenlidir ancak prod ortamına doğrudan deploy için ek kontroller (protected branches, manuel onay, canary/feature-flag stratejileri) önerilir. Her zaman geri dönüş (rollback) planı hazırlayın.