Her sürümde aynı el işlemleri tekrar ediyorsun. Kodu çek, testi elle çalıştır, dosyaları sunucuya kopyala, servisi yeniden başlat. Bir adımı unuttuğunda canlı ortam çöküyor. Bir ci cd pipeline tam da bu sıkıntıyı bitirmek için var.Bu yazıda GitHub Actions ile sıfırdan bir boru hattı kuracağız. Build, test ve sunucuya otomatik deploy aşamalarını tek tek ele alacağız. Sonunda her push'ta kodun kendi kendini test edip yayına gideceği bir düzen kuracaksın.
CI CD Pipeline nedir ve neden gerekli?
CI/CD iki kavramın birleşimidir. Sürekli entegrasyon, geliştiricilerin kodunu sık sık birleştirip her birleşimde otomatik test etmek demektir. Sürekli dağıtım ise test edilen kodu otomatik olarak hedef ortama göndermektir.Bir ci cd pipeline bu iki süreci tek bir akışta birleştirir. Kod deposuna her gönderimde aynı adımlar aynı sırayla çalışır. İnsan hatası azalır, geri bildirim hızlanır. Bir hata canlıya gitmeden önce test aşamasında yakalanır.Manuel dağıtımın en büyük sorunu tutarsızlıktır. Bir gün adımları doğru yaparsın, ertesi gün birini atlarsın. Otomasyon bu tutarsızlığı ortadan kaldırır. Süreç her seferinde aynı şekilde işler.
Boru hattının üç temel aşaması
İyi bir akış genelde üç ana aşamadan oluşur. Her aşama bir öncekinin başarısına bağlıdır. Test geçmezse dağıtım hiç başlamaz.
AşamaGöreviTipik süre
Build | Bağımlılıkları kurar ve uygulamayı derler | 1-3 dakika
Test | Birim ve entegrasyon testlerini çalıştırır | 2-5 dakika
Deploy | Doğrulanan kodu sunucuya gönderir | 1-2 dakika
Build aşaması ortamı hazırlar. Bağımlılıkları kurar, varsa kodu derler. Bu aşamada önbellek kullanmak süreyi ciddi şekilde kısaltır. Aynı bağımlılıkları her seferinde indirmek zaman kaybıdır.Test aşaması kalitenin bekçisidir. Birim testleri, entegrasyon testleri ve güvenlik taramaları burada çalışır. Bir test başarısız olursa boru hattı durur ve seni uyarır.
GitHub Actions ile ilk yapılandırma
GitHub Actions, deponun içinde bir YAML dosyasıyla çalışır. Dosyayı .github/workflows/ klasörüne koyarsın. Resmi GitHub Actions belgeleri tüm seçenekleri ayrıntısıyla anlatıyor.Aşağıdaki örnek Node.js projesi için build ve test aşamalarını tanımlar:
name: ci cd pipeline
on:
push:
branches: [main]
jobs:
build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm testBu dosya main dalına her push'ta tetiklenir. Önce kodu çeker, sonra Node ortamını kurar. cache: npm satırı bağımlılıkları önbelleğe alır. npm ci temiz bir kurulum yapar, npm test testleri çalıştırır.Eylem sürümlerini sabitlemeye dikkat et. Yukarıda @v4 gibi etiketler kullandık. Bazı ekipler güvenlik için bunları tam commit hash'ine sabitler. Böylece bir eylemin altındaki kod habersiz değişmez.
Sunucuya otomatik deploy ekleme
Test geçtikten sonra sıra dağıtıma gelir. Deploy işini ayrı bir job olarak tanımlamak iyi bir alışkanlıktır. Bu job, build-test job'una bağımlı olur ve sadece o başarılıysa çalışır.
deploy:
needs: build-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Sunucuya deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/app
git pull
npm ci --production
sudo systemctl restart appBurada needs: build-test satırı bağımlılığı kurar. Sunucu bilgileri ise depo gizli anahtarlarında saklanır. SSH anahtarını veya parolayı asla doğrudan YAML içine yazma. Gizli bilgileri her zaman secrets üzerinden geçir.Script bloğu sunucuda çalışacak komutları içerir. Kodu çeker, bağımlılıkları kurar ve servisi yeniden başlatır. Bu akış küçük ve orta projeler için fazlasıyla yeterli.
Boru hattını sağlam tutmak için ipuçları
Çalışan bir boru hattı zamanla yavaşlayabilir veya kırılgan hale gelebilir. Aşağıdaki alışkanlıklar onu sağlam tutar.
- Build süresini on dakikanın altında tut. Hızlı geri bildirim verimliliği artırır.
- Bağımsız testleri paralel çalıştır. Matrix yapısı toplam süreyi kısaltır.
- Dependabot veya benzeri bir araçla bağımlılıkları otomatik tara.
- Job izinlerini en az ayrıcalık ilkesine göre ver.
- Önemli bir aşama başarısız olursa ekibe bildirim gönder.
Bir başka önemli nokta da geri alma planıdır. Dağıtım bozulursa eski sürüme dönebilmelisin. Önceki çalışan sürümü etiketlemek bu işi kolaylaştırır. Böylece sorun çıktığında dakikalar içinde geri dönersin.
Üretim ortamına geçerken
Bir CI CD Pipeline ancak güvenilir bir hedef sunucuyla tam değer üretir. Otomatik deploy'un gittiği yer kararlı olmalı. Garantili CPU, RAM ve hızlı disk, dağıtım sürelerini öngörülebilir kılar.Kritm Cloud Solutions olarak hem özel yazılım geliştiriyor hem de bu boru hatlarının dağıtım hedefi olacak bulut ve VPS altyapısı sunuyoruz. Türkiye lokasyonlu sunucularımızı hizmetlerimiz sayfasından inceleyebilir, kurulum için bizimle iletişime geçebilirsin.Özetle bir CI CD Pipeline, el işlemlerini güvenilir bir otomasyona çevirir. Build ve test aşamalarıyla başla, sonra sunucuya otomatik deploy ekle. Küçük bir projeyle dene, akışı oturduğunda büyük projelere taşı. Sonuçta her push güvenle yayına gider.
