CI/CD Nedir? GitHub Actions ile Kodunuzu Otomatik Test Edip Sunucuya Dağıtma (Deploy) Rehberi
Sunuculara elle dosya atma devri kapandı. Sürekli Entegrasyon (CI) ve Sürekli Dağıtım (CD) kavramlarını, GitHub Actions ile kod pushlandığı anda otomatik test ve sunucu dağıtım boru hattı (pipeline) kurmayı öğreniyoruz.
Yazılım dünyasında geçmiş yıllarda çok yaygın olan ama bir o kadar da riskli bir dağıtım ritüeli vardı: Geliştirici kodunu yerel bilgisayarında yazar, bir FTP programı (FileZilla gibi) açar veya sunucuya SSH ile bağlanıp dosyaları canlı sunucunun üzerine tek tek kopyalardı. Bazen yanlış bir dosya atılır, bazen bir satır hata yüzünden tüm canlı sistem çöker ve sunucu başında saatlerce ter dökülürdü. Günümüz modern yazılım mühendisliği bu ilkel ve hataya açık manuel süreçleri tamamen tarihe gömdü. Artık sahnede 'CI/CD' (Sürekli Entegrasyon ve Sürekli Dağıtım) boru hatları var.
CI/CD Nedir? (Sürekli Entegrasyon & Sürekli Dağıtım)
- CI (Continuous Integration - Sürekli Entegrasyon):
Ekipteki yazılımcıların yazdığı kodları ana depoya (GitHub/GitLab) gönderdiği anda; otomatik sanal bir makinenin ayağa kalkarak kodları derlemesi, güvenlik taramasından geçirmesi ve tüm birim testlerini (Unit Tests) çalıştırması sürecidir. Eğer tek bir test bile patlarsa sistem alarm verir ve hatalı kodun canlıya gitmesi engellenir.
- CD (Continuous Deployment / Delivery - Sürekli Dağıtım):
Testlerden başarıyla geçen onaylanmış kodun, hiçbir insan müdahalesine gerek kalmadan doğrudan üretim (Production) sunucusuna otomatik olarak yüklenmesi, Docker imajının üretilmesi ve servisin kesintisiz olarak yeniden başlatılması sürecidir.
GitHub Actions ile 5 Dakikada İlk CI/CD Pipeline'ınızı Kurun:
GitHub Actions; doğrudan GitHub deponuzun içinde çalışan, dünya genelindeki en popüler ve kurulumu en kolay CI/CD otomasyon aracıdır. Projenizin ana dizininde .github/workflows/deploy.yml adında bir YAML dosyası oluşturarak her şeyi otomatikleştirebilirsiniz.
Örnek Bir GitHub Actions İş Akışı (.github/workflows/deploy.yml):
name: Python Test ve Canlıya Dağıtım
on:
push:
branches: [ main ]
jobs:
test-ve-deploy:
runs-on: ubuntu-latest
steps:
- name: Kodları Çek (Checkout)
uses: actions/checkout@v4
- name: Python Ortamını Kur
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Bağımlılıkları Yükle ve Testleri Koş
run: |
pip install -r requirements.txt
pytest
- name: Sunucuya Otomatik Dağıt (Deploy)
if: success()
run: |
echo 'Testler başarıyla geçti, kod sunucuya aktarılıyor!'
Bu YAML dosyası ne yapar? Siz 'git push origin main' dediğiniz anda GitHub arka planda ücretsiz bir Ubuntu sanal makinesi açar, kodunuzu indirir, testlerinizi çalıştırır ve testler yeşil yandığı anda sunucunuza dağıtımı otomatik olarak gerçekleştirir!
CI/CD Kullanmanın 4 Büyük Avantajı:
1. İnsan Hatasını Sıfırlar: Gece yarısı uykulu bir geliştiricinin yanlış dosyayı canlıya atma ihtimali tamamen ortadan kalkar.
2. Hızlı ve Güvenli Sürüm Çıkışı: Kodunuz test edildiği için her an canlıya çıkmaya hazır (production-ready) durumda bekler.
3. Anında Geri Bildirim: Ekip arkadaşınızın yazdığı bir kod sistemin başka bir yerini bozduğunda, GitHub çekme isteğinde (Pull Request) kırmızı çarpı yanarak herkesi uyarır.
4. Zaman Tasarrufu: Saatlerce süren manuel derleme ve FTP yükleme süreçleri yerine geliştiriciler sadece kod yazmaya odaklanır.
Sonuç: Kodunuzu Otomasyona Emanet Edin
Profesyonel yazılımcılığı amatör kodlamadan ayıran en belirgin çizgi otomasyondur. İster tek kişilik bir hobi projesi geliştirin, ister milyonlarca satırlık kurumsal bir sistem; projenizin ilk gününden itibaren bir CI/CD boru hattı kurmak size muazzam bir özgüven, hız ve yazılım kalitesi kazandıracaktır.