Sürekli Entegrasyon
- İngilizcesi
- Continuous Integration
- Okunuşu
- kıntinyuıs intıgreyşın
Günlük kullanımda iki ad da yaygın.
Kısaca
Sürekli entegrasyon, kod değişikliklerini ana branch'e en az günde bir kez birleştirip her birleştirmeyi otomatik derleme ve testlerle doğrulama pratiğidir.
Sürekli entegrasyon (CI) nedir?
Kısaca CI olarak anılan sürekli entegrasyon, herkesin kendi çalışmasını çoğu zaman mainline denen paylaşılan ana branch'e en az günde bir kez birleştirdiği bir geliştirme pratiğidir. Her birleştirme otomatik bir derleme ve test çalıştırmasını tetikler; böylece ekip, birleşen kodun hâlâ çalışıp çalışmadığını dakikalar içinde öğrenir. Pratik, 1990'ların sonunda Extreme Programming ile adını aldı ve yayıldı; Martin Fowler'ın bu konudaki makalesi de onu geniş kitlelere tanıttı.
Uygulamada GitHub Actions, GitLab CI ya da Jenkins gibi bir CI servisi depoyu izler. Biri bir commit push'ladığında ya da bir pull request açtığında kodu temiz bir makinede çeker, bağımlılıkları kurar, projeyi derler, linter'ları ve otomatik testleri çalıştırır ve pull request'e yeşil ya da kırmızı bir durum bildirir. Kırmızı bir build ekibin en önemli önceliğidir: onu bozan kişi, başka hiçbir şey birleştirilmeden önce sorunu düzeltir ya da değişikliği geri alır. Geri bildirimi hızlı tutmak için ekipler yaklaşık on dakikalık bir build hedefler; bu hedef de Extreme Programming'den gelir.
Birlikte tek bir rapor yazan birkaç kişiyi düşünün. Her biri bir ay boyunca tek başına yazar ve her şey teslimden önceki gece birleştirilirse bölümler birbiriyle çelişir, birleştirme de günler sürer; geliştiriciler buna entegrasyon cehennemi (integration hell) der. Herkes kendi sayfalarını her gün ortak taslağa ekler ve bir editör onu hemen okursa çakışmalar küçük kalır ve henüz tazeyken düzeltilir.
Sürekli entegrasyon çoğu zaman sürekli teslimatla ya da yalnızca bir CI aracına sahip olmakla karıştırılır. CI, ana branch'te doğrulanmış kodla biter; sürekli teslimat oradan devralır ve bu kodu her an canlı ortama dağıtılabilir durumda tutar. Haftalarca yaşayan feature branch'lerde bir CI sunucusu çalıştırmak da asıl anlamıyla sürekli entegrasyon değildir: amaç küçük değişiklikleri ana branch'e sık sık entegre etmektir; bu yüzden CI, trunk-based development ile el ele gider.
Önemli noktalar
- Sürekli entegrasyon, küçük değişiklikleri en az günde bir kez ana branch'e birleştirmek demektir.
- Her birleştirme, temiz bir makinede otomatik bir derleme ve test çalıştırmasını tetikler.
- Bozuk bir build, başka bir şey birleştirilmeden önce düzeltilir ya da geri alınır.
- Hızlı geri bildirim önemlidir: yaklaşık on dakikalık bir build yaygın bir hedeftir.
- CI kodu doğrular; sürekli teslimat onu yayına hazır tutar.
Örnek
# .github/workflows/ci.yml: verify every pull request and every push to main
name: CI
on:
pull_request:
push:
branches: [main]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- run: npm ci # install the exact locked versions
- run: npm run lint # style and static checks
- run: npm test # a failing test turns the check red
- run: npm run build # prove the project still buildsSık sorulan sorular
Sürekli entegrasyon ile sürekli teslimat arasındaki fark nedir?
Sürekli entegrasyon, ana branch'e birleştirilen her değişikliği derler ve test eder. Sürekli teslimat bir adım öteye gider: testleri geçen her build'i kalan testlerden ve ortamlardan geçirir, böylece her an canlı ortama çıkarılabilir.
Geliştiriciler ne sıklıkla entegre etmeli?
En az günde bir kez, çoğu zaman da günde birkaç kez. Birleştirmeler ne kadar küçük ve sık olursa çakışmalar o kadar küçük olur ve build'i hangi değişikliğin bozduğunu bulmak o kadar kolaylaşır.
CI build'i başarısız olursa ne olur?
Ekip bunu en acil iş sayar: build'i bozan kişi onu hızla düzeltir ya da değişikliği geri alır. Branch koruma kuralları da genellikle kontrolleri geçmeyen pull request'lerin birleştirilmesini engeller.
İlgili sayfalar
- CI/CDDevOps ve Bulut, s. 9CI/CD, kod değişikliklerini sık sık derleyen, test eden ve yayınlayan otomatik pratikler bütünüdür; yazılım kullanıcılara hızlı ve güvenli biçimde ulaşır.
- Sürekli TeslimatDevOps ve Bulut, s. 57Sürekli teslimat, her değişikliği otomatik bir pipeline ile derleyip test ederek canlıya hazırlayan ve yazılımı her an yayınlanabilir tutan pratiktir.
- Trunk-Based DevelopmentSürüm Kontrolü, s. 40Trunk-based development, geliştiricilerin küçük değişiklikleri en az günde bir kez ortak ana branch'e birleştirip onu hep yayımlanabilir tuttuğu stratejidir.
- Birim TestiTest ve Kalite, s. 4Birim testi, bir fonksiyonun, metodun ya da sınıfın programın geri kalanından yalıtılmış olarak doğru davrandığını doğrulayan küçük ve otomatik bir kontroldür.
- Test OtomasyonuTest ve Kalite, s. 32Test otomasyonu, testleri kodla çalıştırıp sonuçları denetlemektir; böylece aynı kontroller elle değil, her değişiklikte hızlı ve tutarlı biçimde tekrarlanır.
- GitHub ActionsDevOps ve Bulut, s. 22GitHub Actions, GitHub'ın yerleşik otomasyon platformudur; depodaki YAML iş akışları push ya da pull request olduğunda test, derleme ve dağıtım çalıştırır.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin